我即将将部分网址从details.html?id=1234
更改为details/1234_really_interesting_stuff
。 ID 1234将用于标识内容,really_interesting_stuff
只是为了使URL更具可读性。
在下一步中,我将使用新的URL替换我网站上引用details.html?id=1234
的所有链接,其中really_interesting_stuff
存储在数据库中。我现在面临的问题是:如何制作一个谷歌友好的301重定向,这样我就不会有重复的内容(因为谷歌现在仍然会有details.html?id=1234
这样的旧链接,这些链接也会传播到其他网页上)。我必须转发到details/1234_really_interesting_stuff
。不幸的是,字符串只保存在数据库中。
据我所知,唯一一个谷歌友好的301重定向是一个htaccess文件。但是无法从htaccess文件中的数据库中检索信息。我怎么能解决这个问题?
答案 0 :(得分:1)
据我所知,唯一一个google友好的301重定向是一个htaccess文件。
这是不正确的,谷歌没有办法说明你是如何做你的301s的。
您可以动态执行重定向。 Ex(在PHP中):
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourwebsite.tld/details/1234_really_interesting_stuff");
echo "<html><body>The page has moved <a href="http://www.yourwebsite.tld/details/1234_really_interesting_stuff">here.</a></body></html>" ;
HTML代码段的原因描述为here。
答案 1 :(得分:0)
这是您需要在DOCUMENT_ROOT/.htaccess
RewriteEngine On
# external redirect from actual URL to pretty one with 302
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+details\.html\?id=([^\s&]+) [NC]
#RewriteRule ^ /details/%1? [R=302,L]
# internal forward from pretty URL to actual one
RewriteRule ^details/([^/.]+)/?$ /details.html?id=$1 [L,QSA,NC]
然后在details.html
内,您可以检查标题是否在$_GET['id']
中提供,如果没有,则查询数据库并使用header
函数在URL中附加标题。