怎么写这个RewriteCond?

时间:2012-07-25 19:25:19

标签: apache .htaccess mod-rewrite redirect

我想将stockpicks.php中的url重写为股票选择。当我访问www.website.com/stock-picks时会显示stockpicks.php页面。我使用以下规则。

RewriteRule ^stock-picks /stockpicks.php [PT]

我还想让搜索引擎知道我的上一页stockpicks.php永久转移到股票选择。我使用以下规则但301重定向似乎不起作用。我猜RewriteCond不对。

RewriteCond %{THE_REQUEST} stockpicks.php$
RewriteRule ^stockpicks.php$ /stock-picks [R=301,L]

3 个答案:

答案 0 :(得分:0)

插入符号^表示当前目录下的URL的开头。这个目录是.htaccess文件所在的目录。你几乎可以用插入符号开始所有匹配。

美元符号$表示要匹配的字符串的结尾。您应该添加此内容以停止与较长网址的第一部分匹配的规则。

    RewriteEngine on
    RewriteRule ^stock-picks$ stockpicks.php

答案 1 :(得分:0)

@ Johndave的帖子照顾你的第一个要求。

您还需要重定向请求stockpicks.php的请求,以便将来使用/ stock-picks /(因为这是您要发布的此资源的新位置)。

    Redirect permanent /stockpicks.php http://hostname.com/stock-picks/

我会使用Redirect指令,因为这是让Apache发送“HTTP 301 Moved Permanently”响应的最简单方法。

请注意,这不会陷入循环,因为@Johndave提议的重写规则不会重新启动URL映射过程,因为在原始尝试中指定了[PT]标记。

如果你确实需要使用[PT]标志(为了让Apache处理.php文件),那么我认为你的要求可能会有冲突。

答案 2 :(得分:0)

%{THE_REQUEST}匹配实际的HTTP请求,它看起来像以下任何一种:

GET /stockpicks/ HTTP/1.1

GET /stockpicks.php?some=stuff HTTP/1.1

HEAD /stockpicks.php

POST /stockpicks.php HTTP/1.0

所以你希望你的RewriteCond正则表达式看起来像这样(注意空格需要转义):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /stockpicks.php