zoukankan      html  css  js  c++  java
  • htaccess rewrites重写规则实例

    1、.htaccess rewrite实例开始部分

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /

    2、把不带www的域名地址重定向到带www地址

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^www.metsky.com$ [NC]
    RewriteRule ^(.*)$ http://www.metsky.com/$1 [R=301,L]

    3、终止重写死循环

    RewriteCond %{REQUEST_URI} ^/(stats/|missing.html|failed_auth.html|error/).* [NC]
    RewriteRule .* - [L]

    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule .* - [L]

    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/
    RewriteCond %{QUERY_STRING} !^$
    RewriteRule .* http://www.metsky.com%{REQUEST_URI}? [R=301,L]

    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]
    RewriteRule ^(.*)$ - [env=prefer-language:%1]

    9、只支持PHP fopen访问,其它一概拒绝

    RewriteEngine On
    RewriteBase /
    RewriteCond %{THE_REQUEST} ^.+$ [NC]
    RewriteRule .* - [F,L]

    10、除php fopen可以访问某个子文件夹,其它一概拒绝

    下面的示例可以让你的服务器媒体文件或特殊下载文件只能通过PHP代理脚本下载。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^/]+)/.* HTTP [NC]
    RewriteRule .* - [F,L]

    11、重定向带www到不带www网址

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^abc.com$ [NC]
    RewriteRule ^(.*)$ http://abc.com/$1 [R=301,L]

    12、检查Query string关键字

    下面的示例是检查QUERY_STRING是否包含passkey,否则将跳到登录脚本去。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} !passkey
    RewriteRule ^/logged-in/(.*)$ /login.php [L]

    13、去除URL中的QUERY_STRING

    以下示例去除所有的QUERY_STRING,包括在问好后面跟个空格,都将被mod_rewrite先去除,然后再重定向。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} .
    RewriteRule ^login.php /login.php? [L]

    14、修复无限循环

    由于潜在的配置错误引起的内部重定向请求超过10次就会有一个条错误消息,如果需要增加次数,可以使用LimitInternalRecursion。还可以使用LogLevel debug进行后向跟踪。

    RewriteCond %{ENV:REDIRECT_STATUS} 200
    RewriteRule .* - [L]

    15、重定向PHP文件到HTML文件

    RewriteRule ^(.*).php$ /$1.html [R=301,L]

    16、重定向.html到.php文件

    RewriteRule ^(.*).html$ $1.php [R=301,L]

    17、规定时间阻止访问某些文件

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    # If the hour is 16 (4 PM) Then deny all access
    RewriteCond %{TIME_HOUR} ^16$
    RewriteRule ^.*$ - [F,L]

    18、下划线改成连字符

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /

    RewriteRule !.(html|php)$ - [S=4]
    RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
    RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
    RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
    RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]

    RewriteCond %{ENV:uscor} ^Yes$
    RewriteRule (.*) http://d.com/$1 [R=301,L]

    19、重定向Wordpress Feeds到Feedburner

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/feed.gif$
    RewriteRule .* - [L]

    RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
    RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    20、只允许GET和PUT请求

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_METHOD} !^(GET|PUT)
    RewriteRule .* - [F]

    21、图像、文件防盗链

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^http://(www.)?metsky.com/.*$ [NC]
    RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

    22、停止浏览器预存取

    RewriteEngine On
    SetEnvIfNoCase X-Forwarded-For .+ proxy=yes
    SetEnvIfNoCase X-moz prefetch no_access=yes

    # 阻止X-moz头的预存取请求
    RewriteCond %{ENV:no_access} yes
    RewriteRule .* - [F,L]

    23、把abc.php?id=123重写到def.php?fid=123

    RewriteCond %{QUERY_STRING} ^id=(.*)$
    RewriteRule ^abc.php$ def.php?fid=%1 [L]

  • 相关阅读:
    Repeater OnItemCommand 失效
    继承类时的 this 和 base
    想当然造成的的错误
    排序算法二叉树
    href 一个正则表达式的解析 ? 号解析
    给父窗口添加新的代码
    ValidationSummary 控件
    交叉表 学习
    定向思维 C# datediff
    cookie 问题
  • 原文地址:https://www.cnblogs.com/Gbeniot/p/4142836.html
Copyright © 2011-2022 走看看