我在/ 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
要防止这种情况,但这似乎不起作用。我在这里完全不知所措。有什么建议吗?
答案 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]