gpt4 book ai didi

apache - .htaccess 中单个 RewriteCond 的多个 RewriteRules

转载 作者:行者123 更新时间:2023-12-03 06:21:06 26 4
gpt4 key购买 nike

我的 .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 将多个 RewriteRules 绑定(bind)到单个 RewriteCond(或一组 RewriteCond)。下面是将一个条件应用于三个规则的示例:

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 中访问。

关于apache - .htaccess 中单个 RewriteCond 的多个 RewriteRules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com