Heim > Backend-Entwicklung > PHP-Tutorial > Nginx detaillierte Schritte zum Neuschreiben pseudostatischer Regeln

Nginx detaillierte Schritte zum Neuschreiben pseudostatischer Regeln

PHP中文网
Freigeben: 2023-03-05 14:30:01
Original
7496 Leute haben es durchsucht

伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把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; 
}
Nach dem Login kopieren

然后重启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; 
}
Nach dem Login kopieren


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

include /home/www/bbs/bbs_nginx.conf;
Nach dem Login kopieren

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

下面是一个实例:

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

vim /var/www/html/jb51/bbs/.htaccess
Nach dem Login kopieren

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
Nach dem Login kopieren

wq保存退出。

3. 修改nginx配置文件:

vim  /etc/nginx/nginx.conf
Nach dem Login kopieren

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

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

wq保存退出。

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

/etc/init.d/nginx reload
Nach dem Login kopieren

Nginx常用Rewrite伪静态规则:

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

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

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

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

$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
Nach dem Login kopieren

结合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;
Nach dem Login kopieren

多目录转成参数

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;
}
Nach dem Login kopieren

目录对换

/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;
}
Nach dem Login kopieren

目录自动加“/”

if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
Nach dem Login kopieren

禁止htaccess

location ~//.ht {
deny all;
}
Nach dem Login kopieren

禁止多个目录

location ~ ^/(cron|templates)/ {
deny all;
break;
}
Nach dem Login kopieren

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

location ~ ^/data {
deny all;
}
Nach dem Login kopieren

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

location /searchword/cron/ {
deny all;
}
Nach dem Login kopieren

禁止单个文件

location ~ /data/sql/data.sql {
deny all;
}
Nach dem Login kopieren

给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;
}
Nach dem Login kopieren

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

location ^~ /html/scripts/loadhead_1.js {
access_log off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}
Nach dem Login kopieren

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

“rewrite ^/ http://www.php.cn/;”显示一张防盗链图片
“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 ^/ http://www.php.cn/;
return 412;
break;
}
access_log off;
root /opt/lampp/htdocs/web;
expires 3d;
break;
}
Nach dem Login kopieren

只允许固定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;
Nach dem Login kopieren

将多级目录下的文件转成一个文件,增强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;
Nach dem Login kopieren

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

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

rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Nach dem Login kopieren

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

rewrite ^/([0-9a-z]+)job$ /area/$1/ last;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Nach dem Login kopieren

这样/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;
}
Nach dem Login kopieren

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

rewrite ^/([0-9a-z]+)job$ /$1job/ permanent;
rewrite ^/([0-9a-z]+)job/(.*)$ /area/$1/$2 last;
Nach dem Login kopieren

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

if (!-e $request_filename) {
proxy_pass http://www.php.cn/;
}
Nach dem Login kopieren

域名跳转

server
{
listen 80;
server_name jump.c1gstudio.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
rewrite ^/ http://www.php.cn/;
access_log off;
}
Nach dem Login kopieren

多域名转向

server_name www.c1gstudio.com www.c1gstudio.net;
index index.html index.htm index.php;
root /opt/lampp/htdocs;
if ($host ~ “c1gstudio/.net”) {
rewrite ^(.*) http://www.php.cn/$1 permanent;
}
Nach dem Login kopieren

三级域名跳转

if ($http_host ~* “^(.*)/.i/.c1gstudio/.com$”) {
rewrite ^(.*) http://www.php.cn/$1;
break;
}
Nach dem Login kopieren

域名镜像

server
{
listen 80;
server_name mirror.c1gstudio.com;
index index.html index.htm index.php;
root /opt/lampp/htdocs/www;
rewrite ^/(.*) http://www.php.cn/$1 last;
access_log off;
}
Nach dem Login kopieren

某个子目录作镜像

location ^~ /php {
rewrite ^.+ http://www.php.cn/ last;
break;
}
Nach dem Login kopieren

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 ^.+ http://www.php.cn/ 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;
}
Nach dem Login kopieren

附现在常用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; 
} 
}
Nach dem Login kopieren
Nach dem Login kopieren

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; 
}
Nach dem Login kopieren

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; 
}
Nach dem Login kopieren

SHOPEX伪静态规则 :

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

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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; 
} 
}
Nach dem Login kopieren
Nach dem Login kopieren

实例:shopex启用伪静态

    location /
    {
             if (!-e $request_filename) {
             rewrite ^/(.*)$ /index.php?$1 last;
    }
    }
……
Nach dem Login kopieren

相关文章:

nginx下laravel框架rewrite的设置

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

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

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage