【问题标题】:Htaccess rule to resolve the 404 error when host name is repeating twiceHtaccess 规则解决主机名重复两次时的 404 错误
【发布时间】:2013-10-03 20:33:47
【问题描述】:

我们使用无限制的站点地图生成器来生成 xml 站点地图,它会获取站点中的所有 url。不幸的是,在网站管理员的抓取错误部分发现了一个错误。有大量的 url 被站点地图获取为重复的 url。

例如:如果实际网址是“http://www.example.com/forum/viewtopic.php?f=5&t=221&st=0&sk=t&sd=a&start=10

站点地图获取此 url 以及返回 404 错误的重复 url 为“http://www.example.com/http://www.example.com:80/forum/viewtopic.php?f=5&t=221&st=0&sk=t&sd=a&start=10

(这只是一个示例网址。)

站点地图中列出的所有其他网址都是正确的。问题仅出在论坛部分。(使用 phpbb 进行论坛)。

任何人都可以建议任何有效的 htaccess 规则来避免这个 404 。 我想将'http://www.example.com/http://www.example.com:80/forum/....'之类的所有模式重定向到'http://www.example.com/forum/.........'

我们将不胜感激。

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在DOCUMENT_ROOT目录下的.htaccess中:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+.+?(/forum/[^\s]+) [NC]
    RewriteRule ^ /%1 [R=302,L,NE]
    

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

    说明:

    %{THE_REQUEST} 表示 Apache 收到的原始请求,在您的情况下可能类似于:GET /http://www.example.com:80/forum/viewtopic.php?f=5&t=221&‌​st=0&sk=t&sd=a&start=10 HTTP/1.0

    现在分解我的正则表达式:^[A-Z]{3,}\s/+.+?(/forum/[^\s]+)

    1. 这部分正则表达式 ^[A-Z]{3,}\s 匹配 'GET ' 部分输入。
    2. 这部分正则表达式 /+.+? 匹配 /http://www.example.com:80 部分输入(.+? 是不情愿匹配,直到正则表达式的下一部分,即 /forum/ 开始。
    3. 这部分正则表达式 /forum/ 匹配文字 /forum/ 部分输入。
    4. 这部分正则表达式[^\s]+ 匹配/viewtopic.php?f=5&t=221&‌​st=0&sk=t&sd=a&start=10 部分输入。 (直到找到一个空格)。
    5. (/forum/[^\s]+)/forum/viewtopic.php?f=5&t=221&‌​st=0&sk=t&sd=a&start=10 放入匹配组 #1(在后面的 RewriteRule 中用 %1 表示)

    当上述 RewriteCond 为真时,RewriteRule ^ /%1 [R=302,L,NE] 正在执行。然后,此规则将请求重定向到上面捕获的%1

    【讨论】:

    • 您能否详细说明一下这个答案。即我的源网址是example.com/http://www.example.com:80/forum/…,我想将此网址重定向到example.com/forum/…。所以我可以在哪里提供这个来源。
    • 一旦你有了上面的 .htaccess 代码,它会将http://www.example.com/http://www.example.com:80/forum/viewtopic.php?f=5&t=221&st=0&sk=t&sd=a&start=10 重定向到http://www.example.com/forum/viewtopic.php?f=5&t=221&st=0&sk=t&sd=a&start=10 测试一下,如果可行我会添加解释。
    • 非常感谢阿努巴瓦。这个答案很有效。我对正则表达式很陌生,如果你不介意对这条规则进行小的澄清。
    • 不客气,很高兴它成功了。用我的答案添加解释。
    • 是的。清除。非常感谢您在这种危急情况下的努力和帮助。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2016-09-20
    • 2016-09-14
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多