使用mod_rewrite将请求重写到父目录

时间:2014-02-17 14:25:05

标签: php css apache .htaccess mod-rewrite

使用WAMP进行一些本地PHP开发。将所有请求路由到index.php,之外的资产请求,例如样式表和图像,这些资源位于文档根目录之外的父目录中。目录如下:

C:\WAMP\www\
    ↳ mySite
        ↳ public
            ↳ .htaccess
            ↳ index.php
        ↳ assets
            ↳ style
                ↳ desktop.css

的.htaccess

RewriteEngine on
RewriteBase /mySite/
RewriteCond %{REQUEST_URI} \.css$ [NC]
RewriteRule ^(.*)$ assets/$1 [L]
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.+)\/?$ index.php?url=$1 [L,QSA]

mySite.conf

Alias /mySite/ "C:/WAMP/www/mySite/public/"

<Directory "C:/WAMP/www/mySite/public/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order allow,deny
    Allow from all
</Directory>

结果

localhost/mySite/ - 按预期返回index.php

localhost/mySite/style/desktop.css返回内部服务器错误

我错过了什么?

由于

2 个答案:

答案 0 :(得分:1)

这可能是由于循环。

尝试使用此代码来解决此问题:

RewriteEngine on
RewriteBase /mySite/

RewriteRule ^((?!assets/).+?\.css)$ assets/$1 [L,NC]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule ^(.+)\/?$ index.php?url=$1 [L,QSA]

答案 1 :(得分:0)

正如Anubhava在另一个问题中回答的那样:

  

只是为了澄清任何网站都无法访问其DOCUMENT_ROOT文件夹级别以上的文件。

所以我应该将文档根目录设置为mySite/并将所有请求路由到public/以实现我通过公开文档根目标所实现的相同安全性。

现在assets/位于文档根目录中,我可以按照OP中的需要将资产请求重写到此目录。