我正在尝试重定向此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]
1条答案
按热度按时间4szc88ey1#
RewriteRule
* pattern *(第一个参数)只匹配URL路径,而不匹配查询字符串。您已经在RewriteCond
指令中匹配了查询字符串,因此无论如何不需要执行两次。如果没有URL路径(即所有请求都指向文档根目录),那么您可以简化 * 模式 *,并且不需要捕获URL路径。
在 * substitution * 字符串(第二个参数)中包含正则表达式
([0-9]*)
是没有意义的。这是一个"oridinary"字符串,不是正则表达式。请尝试以下操作:
除了捕获
category
值之外,我们还可以捕获完整的名称/值对以避免重复。\d
是一个速记字符类,与[0-9]
相同。我还对此进行了修改,使其只匹配1或2个数字(因为您说您只有12个类别)。使用*
量词将允许 * empty *category
参数。请注意,这只匹配文档根,根据您的例子。即,它不会匹配
example.com/foo?category=1&page1
。只有URL包含page=1
作为第二个URL参数。您不需要在目标中包含完整的绝对URL,除非您希望将其作为规范重定向的一部分。