我想将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]
答案 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