【问题标题】:Htaccess Not Working - Redirect 301Htaccess 不工作 - 重定向 301
【发布时间】:2013-05-16 20:22:39
【问题描述】:

由于一些错误的 URL,我们生成了一些不起作用的链接,我想通过 301 重定向来重定向它们,以解决 Google 的一些网站管理员工具问题。

所以,我们有这样的 URL:

http://www.site.com/subdomain/z//-products

*注意子域是可变的,url的其余部分是静态的。

附带说明,这个 URL 没有意义,这就是我想要重定向它的原因。应该是这样的:

http://www.site.com/bedroom/z/12345/bedroom-furniture-products

无论如何,我们已经动态生成了这些错误的 URL。我们已经修复了它们,但 google 拾取了它们并继续尝试抓取它们。我想创建一个 htaccess 规则来 301 重定向它们,这个问题最终应该会消失。

这是我尝试使用 htaccess 的方法,但无济于事:

^(.*)/n//-products/?$ $1 [R=301,B]

我也尝试了各种排列方式,但都不起作用。我怀疑这是一个实体转义问题,但我的研究导致我添加了 [B],但这似乎也不起作用。这就像重定向规则正在工作,但它只是重定向到原始页面。

我在这里错过了什么?

【问题讨论】:

  • 显然从这个错误的 URL /subdomain/z//-products 我们无法重定向到 /bedroom/z/12345/bedroom-furniture-products。因此,您必须指定您的要求,即对于错误的 URL,您确切希望重定向到哪个 URI?
  • 是的,你是对的。我要做的就是将其重定向: /subdomain/z//-products 到 /subdomain

标签: regex apache .htaccess mod-rewrite


【解决方案1】:

我相信 anubhava 是正确的,因为您描述的示例 URL /subdomain/z//-products 与您尝试应用的 RewriteRule 之间存在不一致。不确定这是否是一个错字。甚至可能是您的复制/粘贴操作实际上添加了“/n”字面意思。

Anyhoo,让我们假设您想让规则与 /subdomain/z//-products 一起工作:

RewriteRule ^/([^/]+)/z//\-products/?$ http://www.site.com/$1 [R=301]

请参阅the example 1 slides of this PDF 以快速获取第一部分。它比使用(.*) 快得多。

我们从字面上匹配z 字符和周围的斜线。我们将- 字符转义,然后我们执行URL 的其余部分并可选地匹配尾部斜杠。如果记忆正确,我们使用“外部”样式重定向,以便机器人重新打开单独的 HTTP 连接,附加匹配的反向引用,并传递状态代码。

让我知道这是否有效。

【讨论】:

  • 谢谢,我会试试这个。是破折号导致规则出错吗?
  • 是的,我相信是的。我总是逃避可能弄乱模式的字符。您实际上是在 URL 中寻找“-”字符,但由于您在 Apache 中使用 PCRE 正则表达式解析器,因此“-”具有重要意义,因为它可以按字面意思搜索,或用于指定范围。例如:[a-zA-Z] 指定一个全小写全大写字母的字符类。我认为将“-”放入而不转义会破坏这一切。我个人使用名为Patterns 的Mac OS X 应用程序来帮助我。它甚至会以您选择的编程语言格式吐出正则表达式。
【解决方案2】:

通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^subdomain/z/-products/?$ /$1 [L,R=302,NC]

一旦您确认它工作正常,请将R=302 替换为R=301。在测试你的 mod_rewrite 规则时避免使用R=301(永久重定向)。

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 2023-03-13
    • 2013-04-06
    • 2017-06-30
    • 2014-07-05
    • 2014-12-21
    • 2011-03-08
    相关资源
    最近更新 更多