我有一个在Apache 2.4上运行的站点,它有两个.htaccess文件,如下所示:
/ htaccess的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
/public/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
## Redirect PDF files to application (bootstrap starts at index.php) for authentication
RewriteCond %{REQUEST_URI} ^/(protected/path/.*\.pdf)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
根级别.htaccess应该强制所有请求进入/ public文件夹(确实如此)。 public/.htaccess
应该处理其他特定于应用程序的事情(比如将某些请求重定向到CMS / application bootstrap index.php)。它也成功地做到了。
我的问题是%{REQUEST_URI}
上的RewriteCond
值。每当我尝试访问(在浏览器中)/public/protected/path/whatever.pdf
时,它都会评估http://somedomain.com/protected/path/whatever.pdf
。我期望它评估为/protected/path/whatever.pdf
,从而匹配正则表达式条件。显然,强制所有请求进入public
文件夹的我的父.htaccess正在干扰,但我无法找到办法让它停止这样做。
我意识到我可以将这两件事结合起来,或者将RewriteCond
放在根级.htaccess中,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
## Redirect PDF files to application (bootstrap starts at index.php) for authentication
RewriteCond %{REQUEST_URI} ^/(protected/path/.*\.pdf)$ [NC]
RewriteRule (.+) public/index.php?p=$1 [QSA,L]
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
</IfModule>
但是,我正在寻找一种解决方案,可以让我保留这两个文件并简单地修复&#34; %{REQUEST_URI}
变量值,因此它不包含父&#34; public&#34;路径。我觉得我错过了一些简单的旗帜或RewriteBase
或类似的指令。任何想法都会非常感激。