重写规则以将旧 URL 重写为漂亮的 URL

重写规则以将旧 URL 重写为漂亮的 URL

我希望https://www.example.com/somePage.php?id=1234被重定向到https://www.example.com/tool/1234(以便旧链接和书签能够正常工作)。

我想我已经接近了,但这似乎不起作用......

RewriteRule ^somePage.php?toolid=([0-9]+)$ /tool/$1 [R=301,L]

这里有什么问题?

答案1

您无法匹配查询字符串RewriteRule 图案。您需要使用RewriteCond指令并与QUERY_STRING服务器变量进行比较。

但是,假设您稍后在配置文件中有一个内部重写,该重写会重写回(真实)丑陋的 URL,那么您无法进行简单的重定向,因为这会导致重定向循环。您需要确保仅重定向初始请求,而不是重写的 URL。

假设这是.htaccess基于您现有的RewriteRule 图案,在配置文件顶部附近尝试以下内容:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^toolid=(/d+)$
RewriteRule ^somePage\.php$ /tool/%1 [R=301,L]

但请注意,您的示例 URL 与您的代码示例不同。我采用了您的代码示例。

环境REDIRECT_STATUS变量在初始请求时为空,但在成功进行内部重写后被设置为“200”。因此,这避免了每个目录文件中的重定向循环.htaccess

确保您已清除浏览器缓存,因为任何错误的 301(测试时)都会被浏览器缓存。

相关内容