我的 .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(使用前将#替换为@)