您的位置:首页 > 运维架构 > Nginx

Nginx服务器下使用rewrite重写url以实现伪静态的示例

2019-03-05 14:09 351 查看

这篇文章主要介绍了Nginx服务器下使用rewrite重写url以实现伪静态的示例,这里举了Discuz!和WordPress这两个常用的PHP程序,需要的朋友可以参考下
经过网上查阅和测试,发现Nginx的Rewrite规则和Apache的Rewite规则差别不是很大,几乎可以直接使用。比如在Apache中这样写规则

rewrite ^/([0-9]{5}).html$ /viewthread.php?tid=$1 last;
而在Nginx中写成这样写是无法启动的,解决的办法是加上两个双引号:

rewrite “^/([0-9]{5}).html$” /viewthread.php?tid=$1 last;
同时将RewriteRule为Rewrite,基本就实现了Nginx的Rewrite规则到Apache的Rewite规则的转换。

Rewrite的Flags

last - 基本上都用这个Flag。 break - 中止Rewirte,不在继续匹配 redirect - 返回临时重定向的HTTP状态302 permanent - 返回永久重定向的HTTP状态301
WordPress的Rewrite
其实在Nginx下配置WordPress的Rewrite还是比较简单的,在location /{…}里面加入

if (!-f $request_filename){rewrite (.*) /index.php;}
即可实现。

下面是一个完整的vhost的配置文件

server {listen 80;server_name ccvita.com www.ccvita.com;location / { index index.html index.htm index.php; root /www/wwwroot/ccvita.com; if (-f $request_filename/index.html){ rewrite (.) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.) $1/index.php; } if (!-f KaTeX parse error: Expected 'EOF', got '}' at position 46: …) /index.php; }}̲location ~ \.ph… { include fastcgi_params; fastcgi_index index.php; fastcgi_pass 127.0.0.1:8787; fastcgi_param SCRIPT_FILENAME /www/wwwroot/ccvita.com$fastcgi_script_name; }location /ccvita-status { stub_status on; access_log off; }}
Discuz!的Rewrite
下面的Rewrite中百分号前面多了个转移字符“\”,这在Apache中是需要的,而在Nginx中则是不需要的。

rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
正确的应该是百度收录批量查询

rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;
这个错误在基本上目前所有使用Nginx作为服务器,并且开启了Rewrite的网站上存在。包括Discuz!官方,目前已经给cnteacher反馈了。
Nginx实例代码

server { listen 80; server_name www.ccvita.com ccvita.com; location / { index index.html index.htm index.php; root /www/www.ccvita.com; rewrite ^(.*)/archiver/((fid|tid)-[\w-]+.html)$ $1/archiver/index.php?KaTeX parse error: Can't use function '\.' in math mode at position 46: …0-9]+)-([0-9]+)\̲.̲html $1/forumdisplay.php?fid=$2&page=KaTeX parse error: Can't use function '\.' in math mode at position 56: …0-9]+)-([0-9]+)\̲.̲html $1/viewthread.php?tid=$2&extra=page%3D$4&page=KaTeX parse error: Can't use function '\.' in math mode at position 50: …rname|uid)-(.+)\̲.̲html $1/viewpro.php?$2=KaTeX parse error: Can't use function '\.' in math mode at position 48: …rname|uid)-(.+)\̲.̲html $1/space.php?$2=KaTeX parse error: Can't use function '\.' in math mode at position 31: … ^(.*)/tag-(.+)\̲.̲html $1/tag.php?name=KaTeX parse error: Expected 'EOF', got '}' at position 9: 2 last; }̲ location ~ \.p… { include fastcgi_params; fastcgi_index index.php; fastcgi_pass 127.0.0.1:8694; fastcgi_param SCRIPT_FILENAME /www/www.ccvita.com$fastcgi_script_name; } location /www.ccvita.com-status { stub_status on; access_log off; }}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: