重定向到 'pretty-urls' 无效
Redirect to 'pretty-urls' doesn't work
我想让我的网站有 'pretty-urls'。我还想让输入 'ugly' url 的用户被重定向到 'pretty-urls'.
简化示例:
我有第 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= [L]
然而它不起作用,据我所知它进入了无限循环。
我想要的是可能的吗?如果是的话怎么办?
对您的案例使用 %{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= [NC,L]
我想让我的网站有 'pretty-urls'。我还想让输入 'ugly' url 的用户被重定向到 'pretty-urls'.
简化示例:
我有第 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= [L]
然而它不起作用,据我所知它进入了无限循环。
我想要的是可能的吗?如果是的话怎么办?
对您的案例使用 %{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= [NC,L]