Я переношу свой сервер с Apache на Nginx и имею это очень простое правило .htaccess
:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
Идея этого заключается в том, чтобы направлять каждый запрос на передний контроллер ( index.php
). Я пытаюсь сделать то же самое с Nginx. Я использовал онлайн-конвертер, чтобы сделать этот блок местоположения Nginx:
location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php break; } }
но когда я добавляю его в конфигурацию моего сайта, Nginx просто выплевывает исходный код файла PHP в качестве загрузки. Для справки, вот весь файл конфигурации:
http://pastebin.com/tyKtM1iB
Я знаю, что PHP работает, как будто я <?php phpinfo();
блок местоположения и делаю файл с <?php phpinfo();
он работает правильно.
Любая помощь будет оценена по достоинству.
Вот как я направляю ВСЕ на index.php, включая запросы подкаталогов, HTTP args, ect.
location / { try_files $uri $uri/ /index.php?$args; #if doesn't exist, send it to index.php } location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on; # By all means use a different server for the fcgi processes if you need to fastcgi_pass 127.0.0.1:9000; }
Так, например, они отправляются в index.php:
http://foo.bar/something/ http://foo.bar/something/?something=1
Хотя они идут напрямую в файлы
http://foo.bar/someotherphp.php http://img.ruphp.com/php/someimg.jpg
Пропустить конец регулярного выражения:
location / { index index.html index.php; if (!-e $request_filename) { rewrite ^.* /index.php break; fastcgi_pass 127.0.0.1:9001; } }