【问题标题】:Try to Fix 301 Redirect of a Dynamic URL | Not Working尝试修复动态 URL 的 301 重定向 |不工作
【发布时间】:2016-12-18 00:59:43
【问题描述】:

我正在尝试将 URL /topics/blog/dot-net/?page_id=386 301 重定向到 http://www.example.com/dot-net

我试过如下:

Redirect 301 /topics/blog/dot-net/?page_id=386 http://www.example.com/dot-net

我确定以上方法行不通,但只是尝试过。

还有这个:

RewriteCond %{THE_REQUEST} ^(GET|POST)\ /topics/blog/dot-net/?page_id=386(.*)\ HTTP
RewriteRule ^ /dot-net? [R=301,L]

如果您对此问题有所了解。我如何在 .htaccess 中解决这个问题,请给我一个建议。

【问题讨论】:

    标签: .htaccess redirect mod-rewrite


    【解决方案1】:

    mod_alias Redirect 不能用于匹配查询字符串。您的 mod_rewrite 尝试可能应该有效。可能存在缓存问题(来自先前失败的尝试)。但是,如果您只想重定向指定的 URL,则可以这样编写:

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^page_id=396$
    RewriteRule ^topics/blog/dot-net/$ /dot-net? [R=302,L]
    

    RewriteRulepattern 中检查 URL 路径比使用通用的 catch-all 更有效。

    如果您需要防止重写循环,您只需检查THE_REQUEST - 但这在您的问题中没有说明。

    当您确定它工作正常时,将302(临时)更改为301(永久)。

    【讨论】:

    • 没用。我已经使用了如下代码,我将代码放在了我的 HTACCESS 中的前一个代码之下。我是否必须将代码放在其他任何地方。 # Begin 301 RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.example\.com [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301] RewriteCond %{QUERY_STRING} ^page_id=386$ RewriteRule ^topics/blog/dot-net/$ /dot-net? [R=302,L]
    • “没用” - 以什么方式没用?它什么都没做吗? .htaccess 中指令的顺序很重要。如果您有其他指令,那么上述重定向应该在任何规范重定向之后,但在任何其他重写之前。您评论中的代码看起来不错。您应该在问题中包含完整的 .htaccess 文件,以便我们进一步调试。大概是规范的 example.comwww.example.com 重定向工作正常吗?
    • 我快速浏览了您链接到的.htaccess 文件(删除后的评论?)。老实说,不幸的是,它有点“混搭”(看起来有 101 个不同的 WordPress 插件“尝试过”?!)。但是,如果您要将上述指令放在 .htaccess 文件的 very top 中,它“应该”按所述执行重定向。但是......“非常顶部”可能不是这些指令的 正确 位置。任何规范的重定向和访问控制(通过 mod_rewrite 执行)都应该放在第一位。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2013-08-29
    相关资源
    最近更新 更多