.htaccess - 如何将任何 URL 末尾的查询重写为干净的 URL
.htaccess - how to rewrite a query at the end of any URL to a clean URL
我觉得我已经尝试了一切来做一个相当简单的重写,但我就是无法让它工作!不过我真的不是 htaccess 专家。
假设我的 URL 是 example.com/setup/
并且我在 example.com/setup/?cloud=true
的同一页面上有一个稍微修改过的版本
我需要可以在 example.com/setup/cloud/
访问该页面的修改版本
它需要是一个实际的规则(而不是直接的一对一重写),因为整个网站都使用这种模式。
基本上,如果 ?cloud=true
在 URL 的末尾,则需要在 URL 完全相同的位置访问该页面,但在 /cloud/
结束而不是 ?cloud=true
以下是我认为最接近正确规则的内容,但可能还有很长的路要走:
RewriteCond %{QUERY_STRING} ^(.*)/cloud$
RewriteRule ^(.*)$ ?cloud=true
以下规则集应达到预期目的:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ /(.+)\?(cloud)=true
RewriteCond %{QUERY_STRING} ^cloud=true$
RewriteRule ^ /%1/%2? [R=301,L]
RewriteRule ^(.+)/cloud/?$ /?cloud=true [NC,QSA,L]
我觉得我已经尝试了一切来做一个相当简单的重写,但我就是无法让它工作!不过我真的不是 htaccess 专家。
假设我的 URL 是 example.com/setup/
并且我在 example.com/setup/?cloud=true
我需要可以在 example.com/setup/cloud/
它需要是一个实际的规则(而不是直接的一对一重写),因为整个网站都使用这种模式。
基本上,如果 ?cloud=true
在 URL 的末尾,则需要在 URL 完全相同的位置访问该页面,但在 /cloud/
结束而不是 ?cloud=true
以下是我认为最接近正确规则的内容,但可能还有很长的路要走:
RewriteCond %{QUERY_STRING} ^(.*)/cloud$
RewriteRule ^(.*)$ ?cloud=true
以下规则集应达到预期目的:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ /(.+)\?(cloud)=true
RewriteCond %{QUERY_STRING} ^cloud=true$
RewriteRule ^ /%1/%2? [R=301,L]
RewriteRule ^(.+)/cloud/?$ /?cloud=true [NC,QSA,L]