Regex Apache重写规则是否会干扰If和Location指令?

Regex Apache重写规则是否会干扰If和Location指令?,regex,laravel,apache,.htaccess,shibboleth,Regex,Laravel,Apache,.htaccess,Shibboleth,我正在使用Apache为Laravel站点实现Shibboleth单点登录。我想从身份验证中绕过一个特定的URL子集(例如,api/public),这样它们就可以公开访问。出于某种原因,公用文件夹的.htaccess文件似乎阻止了它按预期工作 我尝试了很多不同的方法,所有的道路都导致了同样的问题。这是我目前正在尝试的 <Directory /var/www/html/mysite/public> SSLOptions +StdEnvVars Options Index

我正在使用Apache为Laravel站点实现Shibboleth单点登录。我想从身份验证中绕过一个特定的URL子集(例如,
api/public
),这样它们就可以公开访问。出于某种原因,公用文件夹的
.htaccess
文件似乎阻止了它按预期工作

我尝试了很多不同的方法,所有的道路都导致了同样的问题。这是我目前正在尝试的

<Directory /var/www/html/mysite/public>
    SSLOptions +StdEnvVars
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    <If "%{REQUEST_URI} =~ m#api/public#">
        Require all granted
    </If>
    <Else>
        AuthType shibboleth
        ShibRequestSetting requireSession 1
        Require valid-user
    </Else>
</Directory>
不幸的是,在
.htaccess
文件就位后,
Else
代码仍在执行,Shib代码仍在运行。但是我很确定If条件是被捕获的,因为如果抛出
要求所有被拒绝的
作为一个测试,那么它确实像预期的那样禁止

但是,如果我删除
.htaccess
,这就行了!但这也意味着Laravel中的任何路由现在都被破坏了,我确实需要这个面向公众的URL

我最好的猜测是
.htaccess
重写规则
会导致
Else
代码即使在捕获
If
语句之后仍然运行。有什么建议吗?使用
Location
指令遇到相同的问题


谢谢

找到了解决方案,将在此处共享,以防其他人遇到此问题。问题确实是,
RewriteRule
导致我们再次运行整个过程。
If
第一次像预期的那样停止了Shibboleth,但是在Laravel将我们重定向到
index.php
之后,我们会再次检查它,并将其捡起来

通过将
Else
更改为
ElseIf
,排除
index.php
,解决了这个问题:

<Directory /var/www/html/mysite/public>
    SSLOptions +StdEnvVars
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    <If "%{REQUEST_URI} =~ m#api/public#">
        Require all granted
    </If>
    <ElseIf "%{REQUEST_URI} !~ m#index\.php#">
        AuthType shibboleth
        ShibRequestSetting requireSession 1
        Require valid-user
    </ElseIf>
</Directory>

发展+标准
选项索引跟随符号链接多视图
允许超越所有
要求所有授权
身份验证类型shibboleth
ShibRequestSetting要求会话1
需要有效用户
<Directory /var/www/html/mysite/public>
    SSLOptions +StdEnvVars
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    <If "%{REQUEST_URI} =~ m#api/public#">
        Require all granted
    </If>
    <ElseIf "%{REQUEST_URI} !~ m#index\.php#">
        AuthType shibboleth
        ShibRequestSetting requireSession 1
        Require valid-user
    </ElseIf>
</Directory>