regex - .htaccess RewriteRule 使用查询字符串重写条件,但不将查询字符串添加到最终网址

标签 regex .htaccess mod-rewrite

我想必须遵循重写规则:

  1. 查询字符串必须以 choice1choice2 开头
  2. 查询字符串仅包含一个其他值
  3. 域名应该是最终网址的路径
  4. 最终网址不应包含查询字符串。
  5. 最终网址应在其路径中包含查询字符串的两个值

到目前为止我已经做到了(在此处的帮助下):

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(choice1|choice2)&([^&.]+) [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^\.]+)\..+$ [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3 [L,NE,R=302]

条件很好。 但最终的 url 不包含查询字符串的值(%1 和 %2)。 尽管我不使用 QSA-Flag,但还附加了查询字符串。

一些例子:

first-domain.de?choice1&abc => https://www.mysite.de/link/choice1/abc/first-domain
first-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/first-domain
second-domain.de?choice1&ttt => https://www.mysite.de/link/choice1/ttt/second-domain
second-domain.de?choice2&xyz => https://www.mysite.de/link/choice2/xyz/second-domain

最佳答案

您可以使用此规则:

RewriteEngine On

RewriteCond %{QUERY_STRING}#%{HTTP_HOST} ^(choice1|choice2)&([^&#]+)#(?:www\.)?([^.]+)\. [NC]
RewriteRule ^ https://www.mysite.de/link/%1/%2/%3? [L,NE,R=302]

在单个条件中使用 %{QUERY_STRING}#%{HTTP_HOST} 的原因是我们只能使用最新的 RewriteCond 来捕获值 %1 %2%3

关于regex - .htaccess RewriteRule 使用查询字符串重写条件,但不将查询字符串添加到最终网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62477081/

相关文章:

javascript - 使用 RegExp 匹配括号内设置的字符数

.htaccess - 更改网站域和重定向

php - 如何编写 .htaccess 重定向来查找所有号码?

.htaccess - 用一行 htaccess 让 URL 变得漂亮

javascript - 匹配 URL 的正则表达式以子域开头,但不是 "www"

jQuery 将空格替换为 «-» 不适用于 <input type ="email"/>

regex - 不带 .html 后缀的 URL 重定向

PHP .htaccess 重写 url

php - 如何使用preg_replace和htaccess修改url?

php - 什么是重定向 ://in PATH_TRANSLATED?