【问题标题】:Redirect URL with query string to new "pretty" URL to avoid duplicate content将带有查询字符串的 URL 重定向到新的“漂亮”URL,以避免重复内容
【发布时间】:2020-05-24 08:32:40
【问题描述】:

最好的 .htaccess 重写代码来强制像这样的 URL

https://www.example.com/index.php?page=report/tinytoes_mothercare

到那个地方?

https://www.example.com/report/tinytoes_mothercare

我的网站已经解析了https://www.example.com/report/tinytoes_mothercare,所以我想避免任何重复内容与上面丑陋和糟糕的URL。

【问题讨论】:

    标签: .htaccess url clean-urls


    【解决方案1】:

    您可以在 .htaccess 文件的顶部执行以下操作,现有的 rewrite(“解决”pretty em> URL)将带有查询字符串的旧 URL 重定向到新的 pretty URL。

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond %{QUERY_STRING} ^page=([\w/-]*)
    RewriteRule ^index\.php$ /%1 [QSD,R=302,L]
    

    检查 REDIRECT_STATUS 环境变量的第一个条件确保我们不会通过重定向重写的 URL 来获得重定向循环。 REDIRECT_STATUS 在初始请求中为空,因此仅重定向来自客户端的直接请求。

    第二个条件从查询字符串page URL 参数中获取必要的值。这匹配字符a-zA-Z0-9_(下划线)、/(斜杠)和-(连字符) - 如您的示例 URL。如果您需要匹配更多变体,则需要扩展字符类。然后使用%1 反向引用在RewriteRule substitution 字符串中使用此值。

    请注意,这是一个 302(临时)重定向。仅当您确定它可以正常工作时才更改为 301(永久),以避免缓存问题。

    【讨论】:

    • 谢谢,我会尽力告诉你的!
    • 它不起作用..我的实际 htaccess 以 `Options All -Indexes RewriteEngine On RewriteRule ^sitemap.xml sitemap.php [QSA,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond % 开头{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?page=$1 [QSA,L] ` ////////////// ///// 如果我在此顶部添加您的代码,我的错误网址解析为:EXAMPLE.COM/report/report/tinytoes_mothercare?page=report/…
    • 请编辑您的问题以添加您的.htaccess 文件的内容。
    • 抱歉,您需要 RewriteRule 上的 QSD 标志才能从重定向请求中删除查询字符串。我已经删除了 substitution 字符串中的额外/report。我已经更新了我的答案。
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 2017-04-25
    • 2014-07-08
    • 2019-06-17
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多