我目前的.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。显然我无法向您展示实际的网站。如果您可以下载备份=)
,人们会不喜欢它答案 0 :(得分:1)
.htaccess
文件在范围上是分层的,父目录中的任何此类文件都适用于其子项。
/_project/
中的基本身份验证将应用于子目录,除非您在这些目录中将其关闭,RewriteRule
声明也是如此。通常,最好在子目录结构的RewriteEngine off
中添加.htaccess
以停止在那里应用规则,或者可能在原始规则集上添加条件阻止该结构。