我从零开始开发博客,到目前为止事情变得很好。我终于开始写我的第一篇文章/文章了,我一直在等Google为这个特定的页面编制索引,以确保它没有任何问题。好吧,谷歌目前正在将同一页面索引4次,我(在stackoverflow用户的帮助下)在我的htaccess上有一个mod_rewrite来重写所有来自特定文件的连字符(article.php)。
我目前的文章页面如下所示。例:
www.site.com/article.php?article_id=10&article_title=friendly url goes over here
使用mod_rewrite我已将网址更改为以下内容。
www.site.com/article/id/friendly-url-goes-over-here
但Google似乎正在将同一页面编入索引4次......
www.site.com/article/10/friendly-url-goes-over-here
www.site.com/article/10/friendly-url-goes%20over%20here
www.site.com/article/10/friendly-url%20goes%20over%20here
www.site.com/article/10/friendly%20-url%20goes%20over%20here
为什么它会为同一页面中的4个索引?它似乎将每个连字符的插入次数编入索引,所以如果有10个连字符,我猜测Google会将同一页面的10个索引。这是我的所有htaccess文件。
RewriteEngine on
# add www before hostname
RewriteCond %{HTTP_HOST} ^oddify\.co$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=302,L,NE]
# if on article page, get slugs and make into friendly url
RewriteCond %{THE_REQUEST} \s/article\.php\?article_uid=([^&]+)&article_title=([^&\ ]+)
RewriteRule ^ /article/%1/%2/? [L,R=302,NE]
# if page with .php is requested then remove the extension
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1/ [R=302,L,NE]
RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R]
# Force a trailing slash to be added
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s/+([^.]+?[^/.])[\s?] [NC]
RewriteRule ^ /%1/ [R=302,L]
# allow page direction to change the slugs into friendly seo URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?:^|/)article/([^/]+)/([^/]+)/?$ /webroot/article.php?article_uid=$1&article_title=$2 [L,QSA,NC]
# silently rewrite to webroot
RewriteCond %{REQUEST_URI} !/webroot/ [NC]
RewriteRule ^ /webroot%{REQUEST_URI} [L]
# .php ext hiding
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
几天前我写了这个问题,我确保从谷歌取消索引页面,然后现在谷歌已经开始并以同样的方式重新索引它们。
以下是显示4个索引页的Google页面:google search page
答案 0 :(得分:3)
.htaccess文件的问题在于,对于标题中的每个空格,它都会执行一次重定向。使用永久重定向(301
)可能会或可能不会修复它,但即使这样,如果标题中出现太多空格,浏览器也会发出错误(检测到重定向循环)。您只需在服务器上执行所有操作即可解决这两个问题:
RewriteRule ^article/([^\ ]*)\ ([^\ ]*\ .*) /article/$1-$2 [N]
RewriteRule ^article/([^\ ]*)\ ([^\ ]*)$ /article/$1-$2 [L,R=301]
如果url中至少出现2个空格,则第一条规则匹配,并重写其中一个空格并命令Apache再次通过.htaccess
文件([N]
)。如果只剩下一个空格,则第二个规则将匹配,除了重写最后一个空格外,它还将重定向用户。这只是一次重定向,希望永久重定向只会导致新的网址在Google中显示。
如果url中的空格多于Apache允许的内部递归,则会导致内部服务器错误。如果您有权访问httpd.conf
,则可以更改LimitInternalRecursion
以允许更多内部递归。 警告:将此项设置为SANE编号。如果由于某种原因你的RewriteRules中有一个无限循环并且这个数字非常高,你将锁定你的服务器,直到它达到这个限制。请参阅the documentation。
答案 1 :(得分:2)
尝试将此重定向更改为301:
RewriteRule "^(article)/([^ ]*) +(.*)$" /$1/$2-$3 [L,R=301]
301状态告诉谷歌(以及浏览器和其他客户端)重定向是永久性的,并且不应再考虑旧的URL(带空格的URL)。