首页 > 解决方案 > Apache 指令不使用 IF 条件重定向 REQUEST_URI

问题描述

如果在 REQUEST_URI 中包含“/login”字符串,则 Apache 指令成功地将 Web 应用程序 URL 重定向到帮助页面。这适用于如下的单个指令。

RedirectMatch 301 "^(.*)" "https://x.y.com/help-url/"

但是,如果“REQUEST_URI”包含字符串,我不想重定向到帮助页面login?next=/scm

我修改/添加了如下指令,但它没有按预期工作。

<LocationMatch "^/login">
    <If "%{REQUEST_URI} =~ m#/scm#">
        #Do nothing
    </If>
    <Else>
        RedirectMatch 301 "^(.*)" "https://x.y.com/help-url/"
    </Else>
</LocationMatch>

标签: apacheif-statementrequest-uri

解决方案


为什么不只是?

RewriteEngine on
RewriteCond %{QUERY_STRING} !^next=/scm$
RewriteRule ^/login.+?/scm https://x.y.com/help-url/ [R,L]

我们检查是否没有发送好的查询字符串,在这种情况下,我们将您要检查的路径重定向到帮助 url。

请注意,如果您需要不同的检查,您可以根据需要添加 rewriteconds


推荐阅读