在评估RewriteCond指令

时间:2017-04-04 21:53:13

标签: apache .htaccess mod-rewrite url-rewriting

我有一个在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或类似的指令。任何想法都会非常感激。

0 个答案:

没有答案