我想通过附加查询字符串将每个链接重定向到特定地址。我的 WordPress .htaccess
中有以下内容:
RewriteEngine On
RewriteCond %{QUERY_STRING} catid=([0-9]+) [NC]
RewriteRule (.*) catid%1? [R=301,L]
当用户点击 example.com/?catid=10
时,他们会成功重定向到 example.com/catid10
,这正是我想要的。
但是,当它们进入更深的目录 (example.com/category/?catid=10
) 时,它们不会重定向到 example.com/category/catid10
.
我一直在阅读手册,但找不到答案。
编辑
如果这有帮助,这是 WordPress 在我的 htaccess 中定义的:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
最佳答案
如果已经定义了 RewriteBase/
(通常在 WordPress 中定义,并且如果您现有的重定向正常工作则必须如此),那么您可以使用单个规则执行以下操作:
RewriteCond %{QUERY_STRING} (?:^|&)catid=(\d+) [NC]
RewriteRule (.*?)/?$ $1/catid%1 [QSD,R=301,L]
捕获组(.*?)
是非贪婪的,因此不会消耗后面的可选尾部斜杠。
对文档根目录的请求不需要 RewriteBase
,但所有“更深”的 URL 都需要,因为生成的替换字符串将是相对 em> 网址。
CondPattern 上的非捕获 (?:^|&)
前缀确保它仅与 URL 参数名称 catid
匹配,并且不是 foocatid
等。
关于regex - 查询字符串未重定向到更深层次的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70160899/