.htaccess 中单个 RewriteCond 的多个 RewriteRules

2024-04-03

我的 .htaccess 中有以下命令

    RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
    RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
    RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]

%2 在第二行及以后的行中不起作用。 我可以为 %2 定义任何变量并在所有 RewriteRule 命令中使用它吗? 以下命令有效

     RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
     RewriteRule ^(.*?)-([a-z]+) %2/$1.$2 [L]
     RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com [NC]
     RewriteRule ^(.*?)-([0-9]+)([a-z]) %2/$1$3.$2 [L]

但我想将 %2 用于多个规则行而不重复条件。


您可以使用 RewriteRule 标志S|skip将多个重写规则绑定到单个 RewriteCond(或一组 RewriteCond)。这里是将一个 Cond 应用于三个规则的示例:

RewriteCond  %{HTTP_HOST}  !^www.mydomain.com$
# skip rules if NOT within domain - only way to tie multiple rules to one cond
RewriteRule  .?  -  [S=3]
RewriteRule  ^path1(/.*)$  /otherpath1$1
RewriteRule  ^path2(/.*)$  /otherpath2$1
RewriteRule  ^path3(/.*)$  /otherpath3$1

要更改现有条件以适用于多个规则,您必须:

  • 否定条件(在其前面加上!)
  • 如果您有多个 RewriteCond:
    将 Cond 中的逻辑 AND 更改为 OR,反之亦然。
  • 在要与条件关联的所有规则前面添加跳过重写规则。将 S 参数设置为要跳过的规则行数。

请注意,不可能在跳过的规则中使用任何指向 RewriteCond(如 %1)的反向引用。这些只能在跳过 RewriteRule 中访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.htaccess 中单个 RewriteCond 的多个 RewriteRules 的相关文章

随机推荐