搜索引擎优化与htaccess的友好链接 - 重定向动态链接到静态
问题描述:
我有一个网站,我想切换到搜索引擎友好链接。为了腾出一些工作,我想通过htaccess的,使重定向,从而使像旧的动态链接:搜索引擎优化与htaccess的友好链接 - 重定向动态链接到静态
mydomain.com/mypage.php?id=1&something=2
将被重定向到更友好的一个:
mydomain.com/mypage/1/2/
据我了解我需要这些重定向,以便搜索引擎不会因为重复的内容而惩罚我,因为我需要这样做,我认为它可能更容易让它们变成友好的而不是每个页面上的链接 - 我正在使用正常的html表单,所以它不会很直接。 我试图做到这一点的代码htaccess的:
Options +FollowSymlinks
RewriteEngine On
RewriteBase /directory for mydomain.com/
RewriteRule ^mypage\.php?id=([0-9]+)&something=([0-9]+)$ ^mypage/$1/$2 [R=302,QSA]
RewriteRule ^mypage/([0-9]+)/([0-9]+)/?$ ^mypage.php?id=$1&something=$2 [QSA]
但它不工作。我认为一个问题可能是“?”在:
^mypage.php?id=([0-9]+)....
我可能是错的,但通过很多测试,我断定我不能使用?在那里标记,但不知道如何解决它。
请帮忙。
答
您无法匹配RewriteRule
中的查询字符串。正确的方式来处理这是在DocumentRoot/.htaccess
文件中使用这些规则:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /test_redirects/
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/test_redirects/([^.]+)\.php\?id=([^\s&]+)&something=([^\s&]+) [NC]
RewriteRule^%1/%2/%3? [R=302,L]
# internal forward from pretty URL to actual one
RewriteRule ^([^/]+)/([0-9]+)/([^/]+)/?$ $1.php?id=$2&something=$3 [L,QSA]
嗨,谢谢你的快速回答。我尝试了你的代码,它重写了网址以友好的,但页面没有打开 - 在服务器上找不到错误的404请求页面。这是否意味着我没有阅读第二条规则? – user1857756 2014-10-08 14:22:10
当您收到404时,您在浏览器中看到的页面URL是什么? – anubhava 2014-10-08 14:24:04
重写的一个。在这个例子中,它会是:mydomain.com/mypage/1/2,但我使用的URL指向旧的:mydomain.com/mypage.php?id=1&something=2 – user1857756 2014-10-08 14:27:55