【问题标题】:Rewriting a request to a parent directory with mod_rewrite使用 mod_rewrite 重写对父目录的请求
【发布时间】:2014-02-21 13:50:31
【问题描述】:

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

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 返回内部服务器错误

我错过了什么?

谢谢

【问题讨论】:

    标签: php css apache .htaccess mod-rewrite


    【解决方案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]
    

    【讨论】:

    • 感谢您的回复@anubhava。根据您在另一个问题上提供的答案,我可能在我的 OP 中不清楚 - 我想将请求重写到文档根目录之外的文件,我认为这无法完成:Just to clarify any web site cannot access files above its DOCUMENT_ROOT folder level.
    • 是的,您的DOCUMENT_ROOT 上方的任何内容都无法通过网络访问。
    【解决方案2】:

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

    只是为了澄清任何网站都不能访问高于其 DOCUMENT_ROOT 文件夹级别的文件。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多