htaccess从/foo/bar/mydocument.doc重定向到/foo/bar/auth_test.php?q=mydocument.doc

时间:2009-10-22 17:35:57

标签: php apache .htaccess mod-rewrite

我在/ foo / bar /

中有一堆带有大量文档和pdf的网站

目录浏览已关闭,因此您必须知道特定的URL / URI组合才能获取文档。我想找到一种方法将所有请求重定向到/ foo / bar /到一个php页面,检查他们的auth cookie是否已设置,如果是,则获取他们的文件。当然,如果请求是auth_test.php,我还需要触发规则 not ,以防止循环。我一直在与/ foo / bar /中的.htacess战斗,我根本无法让它工作。通过比较,mod_rewrite使正则表达式看起来清晰明了。

这是我当前的.htaccess文件(在/ foo / bar /中):

RewriteEngine On
RewriteRule !^auth_test\.php$ /foo/bar/auth_test\.php?q=$1 [R=301,L]

此成功适用于/foo/bar/auth_test.php的请求,但是对/ foo / bar /的请求会将我发送给/foo/bar/auth_test.php?q=

就像1美元甚至没有被拿起。此外,如果文件存在,似乎会忽略此规则,因此对/foo/bar/mydocumnent.doc的请求会导致提示用户下载所请求的文件。我甚至试图添加

RewriteCond %{REQUEST_FILENAME} -f 

要防止这种情况,但这似乎不起作用。我在这里完全不知所措。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

为了让$ 1工作,你需要设置一个匹配的捕获组并分配给$ 1 试试这个

RewriteRule !^(auth_test\.php)$ /foo/bar/auth_test\.php?q=$1 [R=301,L]

我不确定你在auth_test.php中做了什么检查但是使用RewriteRules和条件你也可以在.htaccess文件中执行cookie检查。

答案 1 :(得分:0)

尝试以下方法:

RewriteCond $1 !^auth_test\.php$
RewriteRule (.*) /foo/bar/auth_test.php?q=$1 [R=301,L]

或者这个:

RewriteCond %{REQUEST_URI} ^/foo/bar/(.*)
RewriteRule !^auth_test\.php$ /foo/bar/auth_test.php?q=%1 [R=301,L]