【问题标题】:Apache LocationMatch everything but rootApache LocationMatch除root之外的所有内容
【发布时间】:2016-07-11 21:52:14
【问题描述】:

我读到<Location '/'> 实际上匹配整个域,而不仅仅是根位置。我想创建一个匹配除http://my.domain.com/ 之外的所有内容的Location 或LocationMatch 块,这意味着如果最后一个'/

后面有任何字符,它将触发

这是我将如何测试它:

<LocationMatch "REGEX GOES HERE">
    AuthType Shibboleth
    ShibRequireSession On
    Require Shibboleth
</LocationMatch>

我认为 Shibboleth 可能会改变一些行为。另请注意,我使用的是 Apache 2.2,但适用于 2.4 的解决方案也足够了。

【问题讨论】:

    标签: regex apache pcre shibboleth locationmatch


    【解决方案1】:

    您可以在此正则表达式中使用LocationMatch:

    <LocationMatch "^/.">
    
    </LocationMatch>
    

    ^/ 之后的单个 DOT 将确保http://my.domain.com/ 之后至少有一个字符,从而导致它与着陆页不匹配。

    More details about LocationMatch

    测试:

    将此指令创建为:

    <LocationMatch "^/(?<sitename>.+)">
        RewriteEngine On
        RewriteCond %{HTTP_HOST} !^www\.
        RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI}?u=%{env:MATCH_SITENAME} [L,R=302]
    </LocationMatch>
    

    现在来测试我正在这样做:

    curl -kI -A "Chrome" -L 'http://localhost/index.php'
    HTTP/1.1 302 Found
    Date: Mon, 11 Jul 2016 22:31:37 GMT
    Server: Apache/2.4.12 (Unix) OpenSSL/1.0.1j PHP/5.6.9 mod_wsgi/3.5 Python/2.7.9
    Location: http://www.localhost/index.php?u=index.php
    Content-Type: text/html; charset=iso-8859-1
    
    HTTP/1.1 200 OK
    Date: Mon, 11 Jul 2016 22:31:37 GMT
    Server: Apache/2.4.12 (Unix) OpenSSL/1.0.1j PHP/5.6.9 mod_wsgi/3.5 Python/2.7.9
    X-Powered-By: PHP/5.6.9
    Content-Type: text/html; charset=UTF-8
    
    curl -kI -A "Chrome" -L 'http://localhost/user.php'
    HTTP/1.1 302 Found
    Date: Mon, 11 Jul 2016 22:33:57 GMT
    Server: Apache/2.4.12 (Unix) OpenSSL/1.0.1j PHP/5.6.9 mod_wsgi/3.5 Python/2.7.9
    Location: http://www.localhost/user.php?u=user.php
    Content-Type: text/html; charset=iso-8859-1
    
    HTTP/1.1 200 OK
    Date: Mon, 11 Jul 2016 22:33:57 GMT
    Server: Apache/2.4.12 (Unix) OpenSSL/1.0.1j PHP/5.6.9 mod_wsgi/3.5 Python/2.7.9
    X-Powered-By: PHP/5.6.9
    Content-Type: text/html; charset=UTF-8
    

    curl -kI -A "Chrome" -L 'http://localhost'
    HTTP/1.1 200 OK
    Date: Mon, 11 Jul 2016 22:32:47 GMT
    Server: Apache/2.4.12 (Unix) OpenSSL/1.0.1j PHP/5.6.9 mod_wsgi/3.5 Python/2.7.9
    X-Powered-By: PHP/5.6.9
    Content-Type: text/html; charset=UTF-8
    

    您可以清楚地看到www 重定向在我请求着陆页时不会发生,但在我请求/index.php 时会发生

    【讨论】:

    • 这也是在 root 上触发的......我已经添加了一些关于我如何测试它的说明,也许 Shibboleth 会改变行为
    • 我添加了测试信息以显示该指令如何正常工作
    • 我现在正在使用 Header set X-TEST-ME "TESTING" 进行测试,它出现在所有 URL 上...我认为您可能通过使用 RewriteRules 部分解决了这个问题,我希望有一个更清洁的解决方案
    • 不,我不是。 RewriteRules 只是一种测试LocationMatch 是否被应用到着陆页的方法,从上面的测试很明显,同样的重定向不会只发生在着陆页上。
    • 顺便说一句,如果您使用的是 Apache 2.4,那么您甚至不需要通过 Location 指令来处理这个问题,该指令仅在 Apache/vhost 配置中允许,但在 .htaccess 中不允许
    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2016-01-11
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多