我是nginx的新手,我想将我的网站从Apache迁移到nginx。我的网站包含以下网址:
www.mywebsite.com/category/product/balloon
www.mywebsite.com/category/product/shoe
www.mywebsite.com/information/help
等
由于我正在使用PHP,我需要将所有URL重写为index.php,除非它是图像或者它是“假请求”。到目前为止我的nginx.config:
#block fake requests
location ~* \.(aspx|jsp|cgi)$ {
return 410;
}
#rewrite all requests if it's not a image
location / {
root html;
index index.php 500.html;
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php?q=$1 last;
break;
}
}
error_page 404 /index.php;
# serve static files directly
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico)$ {
access_log off;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME E:/test2/html/$fastcgi_script_name;
include fastcgi_params;
}
此配置不起作用,因为:
1.它不会阻止对.php文件的假请求,我不能将.php添加到(aspx | jsp | cgi)$
2.如果文件存在错误,它不会重写URL:它应该只直接提供静态文件
如果它是一个定义的文件类型(jpg | jpeg | gif | css | png | js | ico )$
我该如何解决这些问题?我非常感谢你能给我的每一个答案,澄清或反馈。
由于 麦克
答案 0 :(得分:1)
您需要配置HttpRewriteModule。此模块可以使用正则表达式(PCRE)更改URI,并根据变量重定向和选择配置。
如果在服务器级别给出了该模块的指令,则在确定请求的位置之前执行它们。如果在该选定位置存在进一步的重写指令,则它们也被执行。如果由于在位置内执行指令而更改了URI,则会再次确定新URI的位置。