我想将url从stockpicks.php重写为选股。当我访问www.website.com/时,选股将显示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]
发布于 2012-07-26 03:28:54
插入符号^表示当前目录下URL的开始。此目录是.htaccess文件所在的任何目录。几乎所有的匹配都会以插入符号开头。
美元符号$表示要匹配的字符串的末尾。您应该将其添加到中,以阻止您的规则与较长URL的第一部分匹配。
RewriteEngine on
RewriteRule ^stock-picks$ stockpicks.php
发布于 2012-07-26 03:43:25
@Johndave的帖子满足了你的第一个需求。
您还需要重定向到请求股票的请求,以便它们在将来使用/ stockpicks.php -picks/(因为这是您想要发布的资源的新位置)。
Redirect permanent /stockpicks.php http://hostname.com/stock-picks/
为此,我将使用Redirect指令,因为这是让Apache发送"HTTP 301 Moved Permanently“响应的最简单方法。
请注意,这不会陷入循环,因为@Johndave提出的重写规则不会像在最初的尝试中那样重新启动URL映射过程。
如果您确实需要使用PT标志(以便让Apache处理.php文件),那么我认为您可能会有相互冲突的需求。
发布于 2012-07-26 08:19:12
%{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
https://stackoverflow.com/questions/11657092
复制相似问题