我正在尝试重写不存在的URL以使用我的index.php文件,同时还将HTTP:Authorization环境变量附加到我的脚本中。到目前为止,我只能一次完成一个或另一个工作。不是都。有人能告诉我.htaccess中的错误在哪里吗?
RewriteEngine on
# Get HTTP authorization
RewriteCond %{HTTP:Authorization} ^Basic.*
# Append to URL
RewriteRule (.*) index.php?_auth=%{HTTP:Authorization} [QSA,L]
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule (.*) index.php?_auth=%{HTTP:Authorization} [QSA,L]
答案 0 :(得分:1)
首先,您的.htaccess在我的测试环境中运行良好。每次请求都会得到_auth
参数。
但您不需要所有这些RewriteCond
,只需要一个RewriteRule
RewriteRule .* index.php?_auth=%{HTTP:Authorization} [QSA,L]
这会将所有请求重写为index.php
,并将授权标头添加为_auth
参数。
如果您只希望使用_auth
参数重写不存在的网址,只需将RewriteCond
添加到RewriteRule
。如果您的案例中存在缓存问题,请同时添加RewriteCond HTTP:Authorization
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^Basic
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?_auth=%{HTTP:Authorization} [QSA,L]
答案 1 :(得分:0)
我非常确定可以通过PHP访问Authorization标头,因此似乎没有必要将该值作为查询参数附加。
请参阅$_SERVER超全球,或许 AUTH_TYPE 是您要找的?
<?php $_SERVER['AUTH_TYPE']) ?>
无论如何,如果你仍坚持使用.htaccess解决方案,那么你真的可以将整个第一条规则全部废弃;如果存在,则_auth参数将附加Authorization标头。
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule (.*) index.php?_auth=%{HTTP:Authorization} [QSA,L]