我有一个网站,我想切换到SEO友好链接。为了省略一些工作,我想通过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]+)....
我可能错了,但经过多次测试我得出的结论是我不能使用?在那里标记但不确定如何解决它。
请帮忙。
答案 0 :(得分:0)
您无法匹配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]