提起htaccess,很多站长都很头疼,对一些专业从事WEB开发管理的网友可能会熟悉些,反正天缘是每次看到都是现学,搞定了就不再深入了。htaccess rewrite重写功能是通过Apache mod_rewrite模块来实现的,的确功能强大,强大到有时候自己可能连一个功能都难实现,尤其是在很多虚拟主机上,很难说一次成功,手到病除,即使是本地测试OK的上传后也总要调试几次才能通过。本文汇总一些常用的重写规则。 注:.htaccess文件生成方法,在windows平台上可以通过FTP软件或cmd命令进行命名,修改可以使用记事本或写字板,Linux平台则可以直接命名。如果本机系统与FTP服务器端操作系统不同,如果出现上传后无效,一般定位检查顺序:调整FTP传输模式、检查文件名是否正确、检查是否开放mod_rewrite....,本来可以通过$res= apache_get_modules(); if(in_array('mod_rewrite', $res)) {echo 'OK';}来判断的,不过,该函数经常被禁用。 1、.htaccess rewrite实例开始部分
Options +FollowSymLinks 2、把不带www的域名地址重定向到带www地址
Options +FollowSymLinks 3、终止重写死循环
RewriteCond %{REQUEST_URI} ^/(stats/|missing\.html|failed_auth\.html|error/).* [NC] 4、缓存友好文件名 这个是原作者的最爱,一般是面向JS和CSS等缓冲文件处理,通过设置不同的名字(比如版本或数字编号)来达到让用户更新(定期)缓存的目的。然后在服务器端,很可能始终就是同一个文件。下面的例子似乎重写 /zap/j/anything-(任意数字).js有关的所有文件,重写为/zap/j/anything.js,CSS处理也类似,把/zap/c/anything-(任意数字).css重写为/zap/c/anything.css。 RewriteRule ^zap/(j|c)/([a-z]+)-([0-9]+)\.(js|css)$ /zap/$1/$2.$4 [L] 5、为无FLASH浏览器设置SEO友好链接 如果用户的浏览器不支持FLASH,可能需要进行友好提醒,那么以下的rewrite重写规则可以让我们少些很多代码。使用时只需要调用自己的域名加上地址调用就可以了。 RewriteRule ^getflash/?$ http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash [NC,L,R=307] 6、移除查询Query string字符串 以下的重写规则会让你少很多SEO上的重复内容,比如page.html和page.html?anything=anything文件,简单的方法就是通过重定向这些带query string的外部请求到没有query string目标地址。
RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/ 7、发送请求给PHP脚本 这个.htaccess rewrite示例对pdf-script.php处理Adobe pdf请求文件完全隐匿。 RewriteRule ^(.+)\.pdf$ /cgi-bin/pdf-script.php?file=$1.pdf [L,NC,QSA] 8、设置客户端的语言变量 对支持多语言显示的网页,可以看一下下面的重写。
RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC] 9、只支持PHP fopen访问,其它一概拒绝
RewriteEngine On 10、除php fopen可以访问某个子文件夹,其它一概拒绝 下面的示例可以让你的服务器媒体文件或特殊下载文件只能通过PHP代理脚本下载。
RewriteEngine On 11、重定向带www到不带www网址
Options +FollowSymLinks 12、检查Query string关键字 下面的示例是检查QUERY_STRING是否包含passkey,否则将跳到登录脚本去。
RewriteEngine On 13、去除URL中的QUERY_STRING 以下示例去除所有的QUERY_STRING,包括在问好后面跟个空格,都将被mod_rewrite先去除,然后再重定向。
RewriteEngine On 14、修复无限循环 由于潜在的配置错误引起的内部重定向请求超过10次就会有一个条错误消息,如果需要增加次数,可以使用LimitInternalRecursion。还可以使用LogLevel debug进行后向跟踪。
RewriteCond %{ENV:REDIRECT_STATUS} 200 15、重定向PHP文件到HTML文件 RewriteRule ^(.*)\.php$ /$1.html [R=301,L] 16、重定向.html到.php文件 RewriteRule ^(.*)\.html$ $1.php [R=301,L] 17、规定时间阻止访问某些文件
Options +FollowSymLinks 18、下划线改成连字符
Options +FollowSymLinks 19、重定向Wordpress Feeds到Feedburner
RewriteEngine On 20、只允许GET和PUT请求
RewriteEngine On 21、图像、文件防盗链
RewriteEngine On 22、停止浏览器预存取
RewriteEngine On |