0

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

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

我还想让搜索引擎知道我以前的页面 stockpicks.php 永久移动到 stock-picks。我使用以下规则,但 301 重定向似乎不起作用。我猜 RewriteCond 是不对的。

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

3 回答 3

0

插入符号 ^ 表示当前目录下 URL 的开始。该目录是 .htaccess 文件所在的任何目录。您将使用插入符号开始几乎所有匹配项。

美元符号 $ 表示要匹配的字符串的结尾。您应该添加它以阻止您的规则匹配较长 URL 的第一部分。

    RewriteEngine on
    RewriteRule ^stock-picks$ stockpicks.php
于 2012-07-25T19:28:54.470 回答
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
于 2012-07-26T00:19:11.967 回答
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 文件),那么我认为您可能有相互冲突的要求。

于 2012-07-25T19:43:24.707 回答