我想让我的网站有'漂亮的网址'。此外,我想让输入'丑陋'网址的用户重定向到'漂亮的网址'。
简化示例:
我有页面data.php?id=123
。我希望它以data/123
形式向用户显示,并且在地址栏中输入的人员data.php?id=123
会将其重定向到data/123
。
我已尝试在.htaccess
中使用以下代码:
# redirect to pretty url
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^/?data\.php data/%1? [R=301,L]
# convert pretty url to normal
RewriteRule ^/?data/([0-9]+)$ data.php?id=$1 [L]
然而,它不起作用,它进入我理解的无限循环。
我想要的是什么,如果是的话?
答案 0 :(得分:2)
对你的案例使用%{QUERY_STRING}
会产生无限循环,因为内部目的地也依赖于它。
但是使用%{THE_REQUEST}
不会:
# Redirect /data.php?id=123 to /data/123
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+data\.php\?id=([0-9]+) [NC]
RewriteRule ^ /data/%1? [R=302,L]
# Internally forward /data/123 to /data.php?id=123
RewriteRule ^data/([0-9]+)/?$ /data.php?id=$1 [NC,L]