如何将URL添加到现有路径以及使用apache的mod_rewrite增加一条路径?

时间:2011-01-02 04:11:33

标签: apache .htaccess mod-rewrite

我目前的.htaccess看起来像这样:

        RewriteEngine On
#       RewriteCond %{REQUEST_URI} !^/_project
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
#       RewriteCond %{REQUEST_FILENAME} !-l
        RewriteRule ^.*$ index.php [QSA,L]

未注释的行很简单:

  • 两个Cond确保Rule未应用于现有文件(!-f)和文件夹(!-d)。
  • Rule其他所有人发送到index.php

我从某个地方取出的未注释的线条。我相信这是我做的最好的方式:'漂亮的网址'。

基本上它有效。现有文件(例如/css/general.css)是可请求的,并且不存在的路径(例如/admin/login)被路由到index.php。 现有路径和非现有路径必须能够“彼此”工作:/css/all.css有时是缓冲的现有css文件,有时(当它不存在时)由PHP处理。 /css/general.css始终是一个文件。 /css/club_N.css(N是数字)始终是PHP脚本。

/_project/是具有基本HTTP身份验证保护的现有文件夹。例如/_project/phpinfo.php也适用。在_project文件夹中,我创建了一个(有效)符号链接到备份文件夹:/_project/backups/。不知何故无法访问备份文件夹中的(现有)文件。例如,/_project/backups/today.bz2被路由到index.php =(对于未注释的任何一条或两条注释行都会发生同样的情况。

htaccess配置有什么问题?如果我完全删除重写内容,我会得到一个403 Forbidden。可能是.htaccess文件夹中的_project(?)。

PS。显然我无法向您展示实际的网站。如果您可以下载备份=)

,人们会不喜欢它

1 个答案:

答案 0 :(得分:1)

.htaccess文件在范围上是分层的,父目录中的任何此类文件都适用于其子项。

/_project/中的基本身份验证将应用于子目录,除非您在这些目录中将其关闭,RewriteRule声明也是如此。通常,最好在子目录结构的RewriteEngine off中添加.htaccess以停止在那里应用规则,或者可能在原始规则集上添加条件阻止该结构。