【问题标题】:htaccess 301 redirect for URL with parameter带有参数的 URL 的 htaccess 301 重定向
【发布时间】:2014-01-06 15:19:35
【问题描述】:

我的 htaccess 文件中有以下内容,该文件采用如下 URL:www.example.com/Page.php?id=About 并将其转换为 www.example.com/about。唯一的问题是,当我在 htaccess 中设置重定向 301 时,旧 URL 不会重定向到新 URL(我理解这是因为您不应该在基本重定向 301 中传递参数 - 我的基本重定向示例)已在下面尝试过)。

Redirect 301 /Page.php?id=About http://www.example.com/about

问题是新的 URL 不一定只是去掉当前的 id 并将其替换为小写版本。例如,我还想:

Redirect 301 /Page.php?id=Example http://www.example.com/example-page

我想保留重写 URL 的当前功能,但也希望对旧 URL 的任何访问都重定向到新 URL(即更新 Google 索引)。目前访问 www.example.com/Page.php?id=About 仍然有效,但显示的页面没有内容。

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z0-9\-]+)/?$ Page.php?id=$1
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2&tabid=$3

【问题讨论】:

    标签: php apache .htaccess mod-rewrite redirect


    【解决方案1】:

    如果您将此规则添加到您的 .htaccess 中,它应该会完成重定向的工作。它会将 ?id=About 添加到 /about 的重定向中。如果您在 2.4.0 或更高版本上运行,则可以添加 QSD 标志以丢弃重定向中的查询字符串。

    RewriteCond %{QUERY_STRING} ^id=About$
    RewriteRule ^page.php /about [NC,R,L]
    

    【讨论】:

    • 感谢您的建议。不幸的是,访问example.com/Page.php?id=About 不会重定向到example.com/about
    • 该规则适用于带有小写 p 的 page.php。我刚刚使用 NC 标志更新了答案,以使规则不区分大小写。现在它应该匹配 page.php 和 Page.php
    • 谢谢,快到了,我收到了:example.com/about?id=About 现在。有没有可能最后没有 ?id=About ?
    • @SteveR:将最后一行设为:RewriteRule ^page.php /about? [NC,R,L]
    • @anubhava QSD 标志(如果使用 2.4.0+ 版本)是否也会删除查询字符串(没有要测试的 2.4)
    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2013-09-12
    • 2012-08-29
    相关资源
    最近更新 更多