1

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

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

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

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

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

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

任何帮助将不胜感激。

4

1 回答 1

2

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

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=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

解释:

%{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(%1在后面的 RewriteRule 中表示)

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

于 2013-06-26T05:55:13.297 回答