如何使用htaccess解决这些vbulletin 404错误?

时间:2013-07-23 15:57:47

标签: .htaccess mod-rewrite http-status-code-404 vbulletin

我有一个非常大的论坛(230k主题,300万个帖子),在Google网站站长工具上报告了大量404个网页,大约有14,000个404网址。谷歌可能会显示这些404,因为我有来自他们的链接,这意味着我没有将这些链接跟进实际页面,从而失去了很多搜索引擎优化的好处。

我知道为什么我有这个问题,一年前我网站上的网址被更改回vBulletin默认,所以它们看起来像这样:

http://www.domain.com/showthread.php?t=323653&p=4230256

我想保持这种方式,因为他们已经这样做了一年。问题是有两种以前的格式显示404错误:

这些:

http://www.domain.com/forums/showthread.php?t=21461

http://www.domain.com/forums/showthread.php?t=16187

只需要从网址中删除forums/,然后执行以下操作:

http://www.domain.com/forums/f8/39840-infractions_system_how_works.html

http://www.domain.com/forums/f11/67410-viewing_ijji_gunz_replays_while_offline.html

这是我安装vbSEO时创建的一个时髦的URL结构。

/forums/需要删除,我认为数字39840和67410可能是线程ID。我认为我们需要在URL中重写所有内容,但我不完全确定如何使用htaccess实现它。

2 个答案:

答案 0 :(得分:1)

假设您的.htaccess位于网站根目录“/”

RewriteEngine on
RewriteBase /

# removes "forums/"
RewriteCond %{REQUEST_URI} !^/showthread.php$ [NC]
RewriteRule ^forums/([^/]+)$ $1 [R=301,NC,L]

# parses thread id
RewriteCond %{REQUEST_URI} !^/showthread.php$ [NC]
RewriteRule ^forums/[^/]+/(\d+)-.*$ showthread.php?t=$1 [R=301,NC,L]

答案 1 :(得分:1)

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

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

# to redirect /forums/f8/39840-something.html to
# /showthread.php?t=39840
RewriteRule ^forums/[^/]+/([^-]+)-[^.]+\.html$ /showthread.php?t=$1 [R=301,NC,L,QSA]

# to redirect /forums//showthread.php?t=39840 to
# /showthread.php?t=39840
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^forums/([^/]+)/?$ /$1 [R=301,NC,L]