问题
I'm migrating my server from Apache to Nginx and have this very simple .htaccess
rule:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
The idea behind it is to direct every request to a front controller (index.php
). I'm trying to do the same with Nginx. I used an online converter to make this Nginx location block:
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php break;
}
}
but when I add it to my site's configuration Nginx just spits out the source code of the PHP file as a download. For reference, here's the entire configuration file:
http://pastebin.com/tyKtM1iB
I know PHP works, as if I remove the location block and make a file with <?php phpinfo();
it works correctly.
Any help would be appreciated.
回答1:
This is how I route EVERYTHING to index.php, including sub-directory requests, 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;
}
So for example, these get sent to index.php:
http://foo.bar/something/
http://foo.bar/something/?something=1
While these go directly to files
http://foo.bar/someotherphp.php
http://foo.bar/assets/someimg.jpg
回答2:
Skip end of regexp:
location / {
index index.html index.php;
if (!-e $request_filename) {
rewrite ^.* /index.php break;
fastcgi_pass 127.0.0.1:9001;
}
}
来源:https://stackoverflow.com/questions/15166445/routing-requests-through-index-php-with-nginx