regex - 查询字符串未重定向到更深层次的目录

标签 regex wordpress apache .htaccess redirect

我想通过附加查询字符串将每个链接重定向到特定地址。我的 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/

相关文章:

regex - 删除 mysql 字段中第一个 # 之前的所有内容

php - Wordpress-不要在代码标签内执行简码

css - 图片加载失败

php - 如何防止其他站点链接到我的 javascript 文件?

javascript - 为什么正则表达式不匹配所有数字而不是匹配字符串末尾的数字?

c# - 使用正则表达式查找并替换特定数字

PHP/Apache : PHP Fatal error: Call to undefined function mysql_connect()

linux - 新建文件夹权限问题

python - 正则表达式在短字符串上永远存在。

css - elementor 网站上 mac 中的字体系列覆盖