Regex Apache重写规则是否会干扰If和Location指令?
我正在使用Apache为Laravel站点实现Shibboleth单点登录。我想从身份验证中绕过一个特定的URL子集(例如,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
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>