【问题标题】:Negation of multiple RewriteCond in htaccesshtaccess中多个RewriteCond的否定
【发布时间】:2020-05-07 06:18:12
【问题描述】:

我想将除我所在国家/地区的 IP 之外的所有 IP 重定向到子文件夹。这就是我想出的。

RewriteEngine on
RewriteCond expr "-R '217.197.32.0/20'" [OR]
RewriteCond expr "-R '217.197.144.0/20'" [OR]
RewriteCond expr "-R '217.198.112.0/20'"
RewriteCond %{REQUEST_URI} !^/subfolder/ [NC]
RewriteRule ^(.*)$ http://example.com/subfolder/$1 [R,L]

(这只是IP列表的最后3行。)

它确实重定向,但不正确。如果您是外国人,您将保留在 root 中,但如果您的 IP 匹配,您将被重定向到子文件夹。

有没有办法否定它?我尝试RewriteCond expr "! -R '217.197.32.0/20'" [OR]! 添加到每个RewriteCond 行,但也没有运气。

【问题讨论】:

  • 这可能是最简单的,如果你只是在你的 IP 检查条件之后插入一个 RewriteRule,它不会做任何替换(- 作为“目标”),并使用S flag跳过下一条规则。这样,您就不需要否定您的 IP 匹配逻辑。

标签: apache .htaccess redirect mod-rewrite ip


【解决方案1】:

我尝试RewriteCond expr "! -R '217.197.32.0/20'" [OR]! 添加到每个 RewriteCond 行,但也没有运气。

如果您否定条件,那么您还需要删除 OR 标志(使其成为隐式 AND)以更改逻辑。 (否则条件将始终成功... !A 或 !B 或 !C 始终为真)

您不需要检查 URL 路径的条件 - 这应该被合并到 RewriteRule pattern 中。 (或将此条件移到顶部。)

例如:

RewriteEngine on
RewriteCond expr "! -R '217.197.32.0/20'"
RewriteCond expr "! -R '217.197.144.0/20'"
RewriteCond expr "! -R '217.198.112.0/20'"
RewriteRule !^subfolder/ http://example.com/subfolder%{REQUEST_URI} [R,L]

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 2011-11-05
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2012-04-22
    • 2023-01-25
    • 2013-07-17
    • 2014-10-18
    相关资源
    最近更新 更多