🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**规则:** ~~~ RewriteRule 虚拟访问网页 真实网页 ~~~ 1.把index.html重定向到index.php ~~~ RewriteEngine On ReWriteRule ^index.html$  /index.php ~~~ 效果: ~~~ 访问www.test.com/index.html效果等于www.test.com/index.php ~~~   2.把index重定向到index.php ~~~ RewriteEngine On ReWriteRule ^index$  /index.php ~~~ 效果: ~~~ 访问www.test.com/index效果等于www.test.com/index.php ~~~   3.根目录下的PHP文件,用html后缀也能访问 写法1: ``` RewriteEngine On ReWriteRule ^([a-zA-Z0-9_]{1,}).html$  /$1.php ``` 效果: ``` 访问www.test.com/index.html效果等于www.test.com/index.php 访问www.test.com/abc.html效果等于www.test.com/abc.php ``` 4.根目录下的php文件,直接访问文件名效果一样 ``` RewriteEngine On ReWriteRule ^([a-zA-Z0-9_]{1,})$  /$1.php ``` 效果: ``` 访问www.test.com/index效果等于www.test.com/index.php 访问www.test.com/abc效果等于www.test.com/abc.php ```   5.访问文件名+html效果等效后缀为php的文件 ``` RewriteEngine On Options -Indexes RewriteRule ^/?([a-z/]+)\.html$ $1.php [NC] ``` 效果:    ``` 访问www.test.com/index.html效果等于www.test.com/index.php 访问www.test.com/abc/abc.html效果等于www.test.com/abc/abc.php ``` 6.访问所有目录下的文件等效于访问文件名+后缀 ``` RewriteEngine On Options -Indexes RewriteRule ^/?([a-z/]+)$ $1.php [NC] ``` 效果: ``` 访问www.test.com/index效果等于www.test.com/index.php 访问www.test.com/abc/abc效果等于www.test.com/abc/abc.php ``` 7.404页面跳转设置 目标:当用户访问我们不存在的页面时候,把网站内容跳转到404页面。在这里,我把404.html作为404页面,放在网站的根目录。 ``` RewriteEngine On Options -Indexes ErrorDocument 404 /404.html ``` 8. ~~~ RewriteRule ^test([0-9]*).html$ test.php?id=$1 ~~~ 效果: ~~~ http://www.xxx.com/test8.html -> http://www.xxx.com/test.php?id=8 ~~~ 9 ~~~ RewriteRule ^cat-([0-9]+)-([0-9]+)\.html$ cat.php?id1=$1&id2=$2 ~~~ 效果哦 ~~~ http://www.xxx.com/cat-1-3.html -> http://www.xxx.com/cat.php?id1=1&id2=3 ~~~ 10 ~~~ RewriteRule ^cat-([a-zA-Z0-9\-]*)-([0-9]+)-([0-9]+)\.html$ cat.php?id0=$1&id1=$2&id2=$3 ~~~ 效果 ~~~ http://www.xxx.com/cat-zbc2ac-3-5.html -> http://www.xxx.com/cat.php?id0=zbc2ac&id1=3&id2=5 ~~~ 11 ~~~ RewriteRule ^cat1-([0-9]+)-([0-9]+)-([0-9]+)\.html$ cat1.php?id1=$1&id2=$2&id3=$3 ~~~ 效果 ~~~ http://www.xxx.com/cat1-4-3-8.html -> http://www.xxx.com/cat1.php?id1=4&id2=3&id3=8 ~~~ 12 ~~~ RewriteRule ^cat([0-9]*)/$ cat.php?id1=$1 ~~~ 效果 ~~~ http://www.xxx.com/cat5/ -> http://www.xxx.com/cat.php?id1=5 ~~~ 13 ~~~ RewriteRule ^catm([0-9]*)/([0-9]*)/$ catm.php?id1=$1&id2=$2 ~~~ 效果 ~~~ http://www.xxx.com/catm6/3/ -> http://www.xxx.com/catm.php?id1=6&id2=3 ~~~ 防止盗链,如果来得要访问jpe jpg bmp png结尾的url 用户不是来自我们的网站,那么让他看一张我们网站的展示图片。 ``` RewriteEngine OnRewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]RewriteCond %{HTTP_REFERER} !^$RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L] ``` 网站升级的时候,只有特定IP才能访问,其他的用户将看到一个升级页面 ``` RewriteEngine onRewriteCond %{REQUEST_URI} !/upgrade.html$RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30 RewriteRule $ http://www.linuxidc.com/upgrade.html [R=302,L] ``` 把老的域名转向新域名 ``` # redirect from old domain to new domainRewriteEngine OnRewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L] ``` 例子 ``` RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ /index.php/$1 [L] ``` * 第一行、将RewriteEngine引擎设置为on,就是让url重写生效; * 第二行、 如果文件存在,就直接访问文件,不进行下面的RewriteRule. * 第三行、 如果目录存在就直接访问目录不进行RewriteRule * 同理: RewriteCond %{REQUEST\_URI} !^.\*(\\.css|\\.js|\\.gif|\\.png|\\.jpg|\\.jpeg)$ #如果是这些后缀的文件,就直接访问文件,不进行Rewrite * 第四行、配置url重写规则,!^(index\\.php|images|robots\\.txt) 这个正则表达式指明了哪些文件不需要重写,而是直接访问; * 第五行、^(.\*)$是一个正则表达式,意思是对所有请求都发送到/index.php/$1,熟悉url的人都知道,以反斜杠(/)开头的,都是相对路径,相对于谁呢?根,也就是网址。 原来自己到网站访问到URL是这样到:http://网址/index.php?/控制器/函数,现在想去掉index.php?,这里index.php后面还多了一个问号,好烦人的,结果文件建好后,输入网址访问,报了nginx 404错误,我的nginx是1.4.7版本 后来经过多方寻找,终于搞定了,打开nginx到配置文件nginx.conf,在server 部分加入以下命令  if (!-e $request\_filename) {        rewrite ^.\*$ /index.php last;      } 保存后,重启nginx (/etc/init.d/nginx restart) ,再输入没有带index.php?的网址,真到可以访问了