Apache .htaccess配置问题中的多个RewriteConditions

时间:2013-03-07 19:17:02

标签: php apache .htaccess mod-rewrite

我正在尝试重写不存在的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]

2 个答案:

答案 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]