使用 .htaccess 重定向页面

Redirect page using .htaccess

你能帮我重定向吗

https://example.com/dev/kampaaniad/?lang=ru

https://example.com/dev/ru/kampaaniad/

更新: .htaccess 代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^lang=ru$
RewriteRule ^dev/kampaaniad/$ /dev/ru/kampaaniad/ [QSD,R=302,L]
</IfModule>

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /dev/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /dev/index.php [L]
</IfModule>

# END WordPress

尝试以下操作,使用 mod_rewrite,在 .htaccess 文件的 顶部 文档根目录 :

RewriteEngine On

RewriteCond %{QUERY_STRING} ^lang=ru$
RewriteRule ^dev/kampaaniad/$ /dev/ru/kampaaniad/ [QSD,R=302,L]

RewriteRule模式(即^dev/kampaaniad/$)只匹配URL-路径,这就是为什么我们需要一个单独的条件RewriteCond 指令)匹配查询字符串。

需要 QSD 标志才能从请求中删除原始查询字符串。

或者,使用反向引用来避免在 替换 字符串中重复:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^lang=(ru)$
RewriteRule ^(dev)/(kampaaniad/)$ //%1/ [QSD,R=302,L]

substitution 字符串中的 </code> 和 <code> 反向引用包含从 RewriteRule pattern(即分别为 devkampaaniad/)。 %1 反向引用包含来自前面 CondPattern.

中捕获组的 ru

如果 lang URL 参数值在查询字符串中是可变的,则将最后一个示例中的 RewriteCond 指令修改为:

RewriteCond %{QUERY_STRING} ^lang=([a-z]{2})$
:

匹配任何2个字符的语言代码。

参考:


更新:

... redirect not working

更新的 问题中的完整 .htaccess 文件来看,您的 .htaccess 文件可能位于 /dev 子目录中?使用上面的指令,我自然假设您会将 .htaccess 文件放在文档根(父)目录中。

如果 .htaccess 文件位于 /dev/.htaccess 而不是 /.htaccess 那么您需要修改上面 RewriteRule 中使用的正则表达式,如下所示:

RewriteCond %{QUERY_STRING} ^lang=ru$
RewriteRule ^kampaaniad/$ /dev/ru/kampaaniad/ [QSD,R=302,L]

RewriteRule模式匹配URL-路径相对.htaccess 文件所在。因此,当 .htaccess 文件位于 /dev 子目录中时,^kampaaniad/$ 匹配 URL /dev/kampaaniad/

您不需要 <IfModule> 包装这些指令,也不需要重复 RewriteEngine 指令,因为这已经出现在 WordPress 代码块中。

要利用文件后面定义的RewriteBase /dev/指令,您可以删除替换字符串上的路径前缀,例如:

:
RewriteRule ^kampaaniad/$ ru/kampaaniad/ [QSD,R=302,L]

因此,您也可以从以后的重写中删除路径前缀:

:
RewriteRule . index.php [L]