我最近更新了我的网站使用:
www.website.com/path/123456
而不是:
www.website.com/path/file.php?id=123456
为了不破坏旧版链接/书签,我想将旧查询字符串重定向到新路径。
我试过了:
RewriteRule ^path/file.php?id=?$ /path/$1 [L,R]
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^path/.* /path/$1 [R]
RewriteCond %{REQUEST_URI} ^/path/$ [NC]
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule .* /path/$1 [R]
RewriteCond %{REQUEST_URI} ^/path/file.php$ [NC]
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule .* /path/$1 [R]
和一些变化,但没有运气。如何设置我的.htaccess来执行此重定向?
答案 0 :(得分:0)
看起来问题是你的正则表达式没有捕获参数,如下所示:
RewriteRule ^path/file.php?id=(.*)$ /path/$1 [L,R]
在正则表达式中,使用括号来捕获稍后要引用的字符串部分,例如$1
。 .*
将匹配任何内容。因此,例如,如果您只想捕获数字,可以将其更改为(\d+)
。
答案 1 :(得分:0)
您可以在DOCUMENT_ROOT/.htaccess
文件中使用此代码:
RewriteEngine On
RewriteBase /
# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} /path/file\.php\?id=(\d+) [NC]
RewriteRule ^ /path/%1? [R=302,L,NE]
# internal forward from pretty URL to actual one
RewriteRule ^path/(\d+)/?$ path/file.php?id=$1 [L,QSA,NC]