Nginx detailed Rewrite pseudo-static rule steps

PHP中文网
Release: 2023-03-05 14:30:01
Original
7305 people have browsed it

伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文件伪静态成html文件,这种相当简单的,下面来介绍nginx 伪静态配置方法有需要了解的朋友可参考。

nginx里使用伪静态是直接在nginx.conf 中写规则的,并不需要像apache要开启写模块(mod_rewrite)才能进行伪静态。

nginx只需要打开nginx.conf配置文件,在server里面写需要的规则即可。

server 
{ 
listen       80; 
server_name  bbs.jb51.net; 
index index.html index.htm index.php; 
root  /home/www/bbs;
error_page  404                                             /404.htm;       #配置404错误页面 
location ~ .*.(php|php5)?$ 
{ 
#fastcgi_pass  unix:/tmp/php-cgi.sock; 
fastcgi_pass  127.0.0.1:9000; 
fastcgi_index index.php; 
include fcgi.conf; 
}
#下面就是伪静态了
location /{ 
rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; 
} 
access_log  access_log   off; 
}
Copy after login

然后重启nginx服务器伪静态就生效了,这种维护起来很是不方便我们可以把它写在外部文件如bbs_nginx.conf中

在/home/www/bbs目录下创建bbs_nginx.conf文件并写入以下代码:

ocation /{ 
rewrite ^(.*)/equip(d+).html$ $1/index.php?m=content&c=index&a=lists&catid=$2 last; 
}
Copy after login


然后在上面的代码后面加上如下代码:

include /home/www/bbs/bbs_nginx.conf;
Copy after login

这样网站根目录中的bbs_nginx.conf伪静态规则,即可实现单独管理。

下面是一个实例:

1. 在使用.htaccess文件的目录下新建一个.htaccess文件,如下面一个Discuz论坛目录:

vim /var/www/html/jb51/bbs/.htaccess
Copy after login

2. 在里面输入规则,我这里输入Discuz的伪静态规则(这里仅增加Discuz的伪静态规则):

# nginx rewrite  rule 
rewrite ^(.*)/archiver/((fid|tid)-[w-]+.html)$ $1/archiver/index.php?$2 last; 
rewrite ^(.*)/forum-([0-9]+)-([0-9]+).html$ $1/forumdisplay.php?fid=$2&page=$3 last; 
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last; 
rewrite ^(.*)/profile-(username|uid)-(.+).html$ $1/viewpro.php?$2=$3 last; 
rewrite ^(.*)/space-(username|uid)-(.+).html$ $1/space.php?$2=$3 last; 
rewrite ^(.*)/tag-(.+).html$ $1/tag.php?name=$2 last; 
# end nginx rewrite rule
Copy after login

wq保存退出。

3. 修改nginx配置文件:

vim  /etc/nginx/nginx.conf
Copy after login

4. 在需要添加伪静态的虚拟主机的server{}中引入.htaccess文件:

include /var/www/html/jb51/bbs/.htaccess; (备注:把路径改成你.htaccess文件的具体位置)
Copy after login

wq保存退出。

5. 重新加载nginx配置文件:

/etc/init.d/nginx reload
Copy after login

Nginx常用Rewrite伪静态规则:

伪静态规则是我们做伪静态的一个非常重的参数了,如果我们能理解得越多就可以快速的写出最优的伪静态代码了,下面给大家整理了一些例子,希望能给你有帮助。

本日志内容来自互联网和平日使用经验,整理一下方便日后参考。
正则表达式匹配,其中:

* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配
文件及目录匹配,其中:
* -f和!-f用来判断是否存在文件
* -d和!-d用来判断是否存在目录
* -e和!-e用来判断是否存在文件或目录
* -x和!-x用来判断文件是否可执行
flag标记有:
* last 相当于Apache里的[L]标记,表示完成rewrite
* break 终止匹配, 不再匹配后面的规则
* redirect 返回302临时重定向 地址栏会显示跳转后的地址
* permanent 返回301永久重定向 地址栏会显示跳转后的地址
Copy after login

一些可用的全局变量有,可以用做条件判断(待补全)

$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
Copy after login

结合QeePHP的例子

if (!-d $request_filename) {
rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;
rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;
break;
Copy after login

多目录转成参数

abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
if ($host ~* (.*)/.domain/.com) {
set $sub_name $1;
rewrite ^/sort//(/d+)//?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
}
Copy after login

目录对换

/123456/xxxx -> /xxxx?id=123456
rewrite ^/(/d+)/(.+)/ /$2?id=$1 last;
例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
Copy after login

目录自动加“/”

if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
Copy after login

禁止htaccess

location ~//.ht {
deny all;
}
Copy after login

禁止多个目录

location ~ ^/(cron|templates)/ {
deny all;
break;
}
Copy after login

禁止以/data开头的文件
可以禁止/data/下多级目录下.log.txt等请求;

location ~ ^/data {
deny all;
}
Copy after login

禁止单个目录
不能禁止.log.txt能请求

location /searchword/cron/ {
deny all;
}
Copy after login

禁止单个文件

location ~ /data/sql/data.sql {
deny all;
}
Copy after login

给favicon.ico和robots.txt设置过期时间;
这里为favicon.ico为99天,robots.txt为7天并不记录404错误日志

location ~(favicon.ico) {
log_not_found off;
expires 99d;
break;
}
location ~(robots.txt) {
log_not_found off;
expires 7d;
break;
}
Copy after login

设定某个文件的过期时间;这里为600秒,并不记录访问日志

location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}
Copy after login

文件反盗链并设置过期时间
这里的return 412 为自定义的http状态码,默认为403,方便找出正确的盗链的请求

“rewrite ^/ //m.sbmmt.com/;”显示一张防盗链图片
“access_log off;”不记录访问日志,减轻压力
“expires 3d”所有文件3天的浏览器缓存
location ~* ^.+/.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
valid_referers none blocked *.jb51.net *.jbzj.net localhost 1.1.1.1;
if ($invalid_referer) {
rewrite ^/ //m.sbmmt.com/;
return 412;
break;
}
access_log off;
root /opt/lampp/htdocs/web;
expires 3d;
break;
}
Copy after login

只允许固定ip访问网站,并加上密码

root /opt/htdocs/www;
allow 208.97.167.194;
allow 222.33.1.2;
allow 231.152.49.4;
deny all;
auth_basic “C1G_ADMIN”;
auth_basic_user_file htpasswd;
Copy after login

将多级目录下的文件转成一个文件,增强seo效果

/job-123-456-789.html 指向/job/123/456/789.html
rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)/.html$ /job/$1/$2/jobshow_$3.html last;
Copy after login

将根目录下某个文件夹指向2级目录

如/shanghaijob/ 指向 /area/shanghai/
如果你将last改成permanent,那么浏览器地址栏显是/location/shanghai/

rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Copy after login

上面例子有个问题是访问/shanghai 时将不会匹配

rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Copy after login

这样/shanghai 也可以访问了,但页面中的相对链接无法使用,
如./list_1.html真实地址是/area/shanghia/list_1.html会变成/list_1.html,导至无法访问。
那我加上自动跳转也是不行咯

(-d $request_filename)它有个条件是必需为真实目录,而我的rewrite不是的,所以没有效果
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
Copy after login

知道原因后就好办了,让我手动跳转吧

rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Copy after login

文件和目录不存在的时候重定向:

if (!-e $request_filename) {
proxy_pass //m.sbmmt.com/;
}
Copy after login

域名跳转

server
{
listen 80;
server_name jump.c1gstudio.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
rewrite ^/ //m.sbmmt.com/;
access_log off;
}
Copy after login

多域名转向

server_name www.c1gstudio.com www.c1gstudio.net;
index index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ “c1gstudio/.net”) {
rewrite ^(.*) //m.sbmmt.com/$1 permanent;
}
Copy after login

三级域名跳转

if ($http_host ~* “^(.*)/.i/.c1gstudio/.com$”) {
rewrite ^(.*) //m.sbmmt.com/$1;
break;
}
Copy after login

域名镜像

server
{
listen 80;
server_name mirror.c1gstudio.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
rewrite ^/(.*) //m.sbmmt.com/$1 last;
access_log off;
}
Copy after login

某个子目录作镜像

location ^~ /php {
rewrite ^.+ //m.sbmmt.com/ last;
break;
}
Copy after login

discuz ucenter home (uchome) rewrite

rewrite ^/(space|network)-(.+)/.html$ /$1.php?rewrite=$2 last;
rewrite ^/(space|network)/.html$ /$1.php last;
rewrite ^/([0-9]+)$ /space.php?uid=$1 last;
discuz 7 rewrite
rewrite ^(.*)/archiver/((fid|tid)-[/w/-]+/.html)$ $1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+)/.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ $1/viewthread.php?tid=$2&extra=page/%3D$4&page=$3 last;
rewrite ^(.*)/profile-(username|uid)-(.+)/.html$ $1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+)/.html$ $1/space.php?$2=$3 last;
rewrite ^(.*)/tag-(.+)/.html$ $1/tag.php?name=$2 last;
给discuz某版块单独配置域名
server_name bbs.jb51.net news.jb51.net;
location = / {
if ($http_host ~ news/.jb51.net$) {
rewrite ^.+ //m.sbmmt.com/ last;
break;
}
}
discuz ucenter 头像 rewrite 优化
location ^~ /ucenter {
location ~ .*/.php?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location /ucenter/data/avatar {
log_not_found off;
access_log off;
location ~ /(.*)_big/.jpg$ {
error_page 404 /ucenter/images/noavatar_big.gif;
}
location ~ /(.*)_middle/.jpg$ {
error_page 404 /ucenter/images/noavatar_middle.gif;
}
location ~ /(.*)_small/.jpg$ {
error_page 404 /ucenter/images/noavatar_small.gif;
}
expires 300;
break;
}
}
jspace rewrite
location ~ .*/.php?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~* ^/index.php/
{
rewrite ^/index.php/(.*) /index.php?$1 break;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
Copy after login

附现在常用cms替换

WordPress伪静态规则:

location / { 
index index.html index.php; 
if (-f $request_filename/index.html){ 
rewrite (.*) $1/index.html break; 
} 
if (-f $request_filename/index.php){ 
rewrite (.*) $1/index.php; 
} 
if (!-f $request_filename){ 
rewrite (.*) /index.php; 
} 
}
Copy after login
Copy after login

PHPCMS伪静态规则:

location / { 
###以下为PHPCMS 伪静态化rewrite法则 
rewrite ^(.*)show-([0-9]+)-([0-9]+)\.html$ $1/show.php?itemid=$2&page=$3; 
rewrite ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1/list.php?catid=$2&page=$3; 
rewrite ^(.*)show-([0-9]+)\.html$ $1/show.php?specialid=$2;
####以下为PHPWind 伪静态化rewrite法则 
rewrite ^(.*)-htm-(.*)$ $1.php?$2 last; 
rewrite ^(.*)/simple/([a-z0-9\_]+\.html)$ $1/simple/index.php?$2 last; 
}
Copy after login

ECSHOP伪静态规则:

if (!-e $request_filename) 
{ 
rewrite "^/index\.html" /index.php last; 
rewrite "^/category$" /index.php last; 
rewrite "^/feed-c([0-9]+)\.xml$” /feed.php?cat=$1 last; 
rewrite “^/feed-b([0-9]+)\.xml$” /feed.php?brand=$1 last; 
rewrite “^/feed\.xml$” /feed.php last; 
rewrite
 
“^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$”
 
/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8
 last; 
rewrite 
“^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$”
 
/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5
 last; 
rewrite 
“^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” 
/category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 
last; 
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3 last; 
rewrite “^/category-([0-9]+)-b([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2 last; 
rewrite “^/category-([0-9]+)(.*)\.html$” /category.php?id=$1 last; 
rewrite “^/goods-([0-9]+)(.*)\.html” /goods.php?id=$1 last; 
rewrite
 “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” 
/article_cat.php?id=$1&page=$2&sort=$3&order=$4 last; 
rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$” /article_cat.php?id=$1&page=$2 last; 
rewrite “^/article_cat-([0-9]+)(.*)\.html$” /article_cat.php?id=$1 last; 
rewrite “^/article-([0-9]+)(.*)\.html$” /article.php?id=$1 last; 
rewrite
 “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html” 
/brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last; 
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2&page=$3 last; 
rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2 last; 
rewrite “^/brand-([0-9]+)(.*)\.html” /brand.php?id=$1 last; 
rewrite “^/tag-(.*)\.html” /search.php?keywords=$1 last; 
rewrite “^/snatch-([0-9]+)\.html$” /snatch.php?id=$1 last; 
rewrite “^/group_buy-([0-9]+)\.html$” /group_buy.php?act=view&id=$1 last; 
rewrite “^/auction-([0-9]+)\.html$” /auction.php?act=view&id=$1 last; 
rewrite “^/exchange-id([0-9]+)(.*)\.html$” /exchange.php?id=$1&act=view last; 
rewrite
 
“^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$”
 
/exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6
 last; 
rewrite 
^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” 
/exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last; 
rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2 last; 
rewrite “^/exchange-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1 last; 
}
Copy after login

SHOPEX伪静态规则 :

location / { 
if (!-e $request_filename) { 
rewrite ^/(.+\.(html|xml|json|htm|php|jsp|asp|shtml))$ /index.php?$1 last; 
} 
}
Copy after login

SaBlog 2.0:

# 只带月份的归档 
rewrite "^/date/([0-9]{6})/?([0-9]+)?/?$" /index.php?action=article&setdate=$1&page=$2 last; 
# 无分类翻页 
rewrite ^/page/([0-9]+)?/?$ /index.php?action=article&page=$1 last; 
# 分类 
rewrite ^/category/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&cid=$1&page=$2 last; 
rewrite ^/category/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&curl=$1&page=$2 last; 
# 归档、高级搜刮 
rewrite ^/(archives|search|article|links)/?$ /index.php?action=$1 last; 
# 全数批评、标签列表、引用列表 带分页 
rewrite ^/(comments|tagslist|trackbacks|article)/?([0-9]+)?/?$ /index.php?action=$1&page=$2 last; 
# tags 
rewrite ^/tag/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&item=$1&page=$2 last; 
# 文章 
rewrite ^/archives/([0-9]+)/?([0-9]+)?/?$ /index.php?action=show&id=$1&page=$2 last; 
# RSS rewrite ^/rss/([0-9]+)?/?$ /rss.php?cid=$1 last; 
rewrite ^/rss/([^/]+)/?$ /rss.php?url=$1 last; 
# 用户 rewrite ^/uid/([0-9]+)/?([0-9]+)?/?$ /index.php?action=article&uid=$1&page=$2 last; 
rewrite ^/user/([^/]+)/?([0-9]+)?/?$ /index.php?action=article&user=$1&page=$2 last; 
# 舆图文件 
rewrite sitemap.xml sitemap.php last; 
# 自界说链接 
rewrite ^(.*)/([0-9a-zA-Z\-\_]+)/?([0-9]+)?/?$ $1/index.php?action=show&alias=$2&page=$3 last;
Copy after login

Discuz 7伪静态规则 :

rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last; 
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&page=$2 last; 
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page\%3D$3&page=$2 last; 
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last; 
rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
Copy after login

Typecho:

location / { 
index index.html index.php; 
if (-f $request_filename/index.html){ 
rewrite (.*) $1/index.html break; 
} 
if (-f $request_filename/index.php){ 
rewrite (.*) $1/index.php; 
} 
if (!-f $request_filename){ 
rewrite (.*) /index.php; 
} 
}
Copy after login
Copy after login

实例:shopex启用伪静态

    location /
    {
             if (!-e $request_filename) {
             rewrite ^/(.*)$ /index.php?$1 last;
    }
    }
……
Copy after login

相关文章:

nginx下laravel框架rewrite的设置

windows服务器下iis伪静态设置方法(附rewrite伪静态组件)

apache Rewrite模块重写功能开启及检测实现

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!