重定向到 '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]