我们使用无限制的站点地图生成器生成xml站点地图,它会占用站点中的所有网址。很抱歉,在网站管理员的抓取错误部分中发现错误。站点地图提取大量网址作为重复网址。
例如:如果实际网址是“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&start=10”
(这只是一个示例网址。)
站点地图中列出的所有其他网址都是正确的。问题仅在论坛部分。(使用phpbb进行论坛)。
任何人都可以建议任何有效的htaccess规则来避免这个404。 我想将所有模式(例如“http://www.example.com/http://www.example.com:80/forum/ ....”)重定向到“http://www.example.com/forum/ .........”
任何帮助将不胜感激。
答案 0 :(得分:2)
通过httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_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=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]+)
现在
^[A-Z]{3,}\s
匹配'GET '
部分输入。/+.+?
匹配/http://www.example.com:80
部分输入(.+?
是不情愿的匹配,直到正则表达式的下一部分,即/forum/
开始。/forum/
与输入的文字/forum/
部分相匹配。[^\s]+
匹配/viewtopic.php?f=5&t=221&st=0&sk=t&sd=a&start=10
部分输入。 (直到找到一个空格)。(/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
。