У меня был проект, в котором мне пришлось перенаправить все не найденные файлы в index.php. Я сделал это в apache, поместив файл .htaccess в папку моего проекта. содержимое файла -
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
теперь я хотел то же самое в nginx. вот как выглядит мой nginx.conf
root /usr/local/apache2/htdocs;
index index.php index.html index.htm;
location /project/ {
root /usr/local/apache2/htdocs;
index index.php index.html index.htm;
try_files $uri $uri/ index.php;
}
теперь, когда я делаю запрос вроде http://localhost/project/hello
тогда этот запрос должен перейти к http://localhost/project/index.php
но это говорит File not found
.
Я подумал, что это сработает, потому что, поскольку root
директива внутри блока местоположения отменяет root
вне блока (хотя значения такие же), модуль перезаписи будет искать /usr/local/apache2/htdocs/project/index.php
. Что мне здесь не хватает?
ОБНОВИТЬ
Эта конфигурация работает
root /usr/local/apache2/htdocs;
location /project/ {
index index.php index.html index.htm; #effectively root here is /usr/local/apache2/htdocs
try_files $uri $uri/ /project/index.php;
}
Но я не понимаю, почему это должно работать, потому что, как указано в документации Вот каталог, соответствующий в блоке местоположения, добавляется к значению root
директива
location /project/ {
root /usr/local/apache2/htdocs;
index index.php index.html index.htm;
- try_files $uri $uri/ index.php;
+ try_files $uri $uri/ /project/index.php;
}
Возможно, вам нужно было указать корень в URL? В противном случае ссылка для URL отсутствует. Сервер не может угадать, в каком каталоге он находился последним или в каком каталоге был указан пользователь. Если это не дает желаемого, прокомментируйте, и я разверну сервер, чтобы провести быстрый тест.