.htaccess对于Apach虚拟主机来说很有用. 很多网站功能可以通过url重写来实现, 学习一点正则表达式对理解重写规则很有好处. 看看常用的url重写规则也能加深理解. 这里收集一些常用的规则学习和备用.
把不带www的url重写到有www:
RewriteEngine On
RewriteBase /
# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.5dmp.com/$1 [R=301,L]
自己的一个需求, 把短目录定向到指定文件:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^webcard.* – [C]
RewriteRule ^(\w*)/*$ /webcard/$1.html [L]
二级域名到用户目录:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.host\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^www\.([^.]+)\.host\.com(.*) /home/$1$2
加斜杠:
RewriteEngine on RewriteBase /~quux/ RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(.+[^/])$ $1/ [R]
禁止图片盗链:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?dnzs123.com /.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.dnzs123.com/abc.gif [R,L]
伪静态, 这里有一个DEDE开启伪静态的重写设置 下面是discuz的重写规则:
RewriteEngine On
RewriteRule ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3
RewriteRule ^/home/(space|network)-(.+)\.html$ /home/$1\.php\?rewrite=$2
RewriteRule ^/home/(space|network)\.html$ /home/$1\.php
RewriteRule ^/home/([0-9]+)$ /home/space\.php\?uid=$1
RewriteRule ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2
还有很多的地方可以用到url重写. 无法一一例举.
如何把 good/wp_xxx.php 重写成 bad/wp_xxx 这样的形式?(应用于所有WP_开头的PHP文件。)
比如访问 good/wp_xxx.php 时 URL显示 bad/wp_xxx
访问 bad/wp_xxx 时还是显示 bad/wp_xxx