htaccess文件中的正则表达式错误地匹配根目录

时间:2014-07-09 15:52:04

标签: regex apache .htaccess shibboleth

我的xxx.yyy.edu网站上的根目录中有以下.htaccess文件。

<FilesMatch "(.+)\.php">
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    ShibUseHeaders On
    Require valid-user
    ShibRequestSetting redirectToSSL 443
</FilesMatch>

这应仅匹配以.php结尾的文件,并匹配以.php结尾的所有文件,然后强制进行身份验证。它的这一部分似乎工作正常。

但是,它也匹配根网址http://xxx.yyy.eduhttp://xxx.yyy.edu/。这不是一件好事,因为它强制对站点的根进行身份验证。

它与xxx.yyy.edu/index.htm或域名后面有任何其他内容的其他网址不匹配,例如xxx.yyy.edu/students.htm甚至xxx.yyy.edu/x

我在www.regexr.com上测试了它,它与那里的根网址不匹配。

任何想法/建议表示赞赏。

2 个答案:

答案 0 :(得分:2)

您正在获取身份验证对话框,因为您的目标网页默认页面设置为index.php

让这个FilesMatch具有负面预测,以避免index.php进行身份验证:

<FilesMatch "^(?!index\.php$).+?\.php$">
    AuthType shibboleth
    ShibRequestSetting requireSession 1
    ShibUseHeaders On
    Require valid-user
    ShibRequestSetting redirectToSSL 443
</FilesMatch>

答案 1 :(得分:0)

听起来好像是新线与&#34; dot&#34; (a la XRegExp)。尝试类似\w+:[\d\w\s\./]+\.php的内容。