使用.htaccess将查询字符串重定向到url

xxslljrj  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(114)

我正在尝试重定向此URL:

https://www.example.com/?category=1&page=1

到这个网址:

https://www.example.com/?category=1

我有12个类别,我可以用一个代码重定向所有?例如,我有

https://www.example.com/?category=2&page=1 => https://www.example.com/?category=2
https://www.example.com/?category=3&page=1 => https://www.example.com/?category=3
.
.
.

我的代码不工作:

RewriteEngine On 
# RewriteCond %{REQUEST_URI}  ^\/index\.php$ 
RewriteCond %{QUERY_STRING} ^category=([0-9]*)&page=1 
RewriteRule ^(.*)category=([0-9]*)&page=1$ https://www.example.com/?category=([0-9]*)%1 [R=302,L]

我已经重定向所有index.php与此代码和作品:

RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
4szc88ey

4szc88ey1#

RewriteCond %{QUERY_STRING} ^category=([0-9]*)&page=1 
RewriteRule ^(.*)category=([0-9]*)&page=1$ https://www.example.com/?category=([0-9]*)%1 [R=302,L]

RewriteRule * pattern *(第一个参数)只匹配URL路径,而不匹配查询字符串。您已经在RewriteCond指令中匹配了查询字符串,因此无论如何不需要执行两次。
如果没有URL路径(即所有请求都指向文档根目录),那么您可以简化 * 模式 *,并且不需要捕获URL路径。
在 * substitution * 字符串(第二个参数)中包含正则表达式([0-9]*)是没有意义的。这是一个"oridinary"字符串,不是正则表达式。
请尝试以下操作:

RewriteCond %{QUERY_STRING} ^(category=\d{1,2})&page=1$
RewriteRule ^$ /?%1 [R=302,L]

除了捕获category值之外,我们还可以捕获完整的名称/值对以避免重复。
\d是一个速记字符类,与[0-9]相同。我还对此进行了修改,使其只匹配1或2个数字(因为您说您只有12个类别)。使用*量词将允许 * empty * category参数。
请注意,这只匹配文档根,根据您的例子。即,它不会匹配example.com/foo?category=1&page1。只有URL包含page=1作为第二个URL参数。
您不需要在目标中包含完整的绝对URL,除非您希望将其作为规范重定向的一部分。

相关问题