RewriteCond跳过实际目录似乎被忽略了

时间:2012-02-09 02:24:45

标签: .htaccess mod-rewrite apache2 cpanel whm

我的问题是当我访问物理目录时,RewriteRule仍然匹配,例如http://a-domain.com/foo/其中foo是Web根目录中的普通目录。

.htaccess文件包含:

Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .? index.php [L]

它在我的开发服务器上运行正常,但在实时WHM / CPanel服务器上运行不正常。我有点失落。

3 个答案:

答案 0 :(得分:0)

我已经在我的cpanel网站上对此进行了测试,你说得对,我发现了问题所在。当您尝试访问网站中没有默认文件(索引)的文件夹时,它会尝试访问负责403 HTTP代码的文件,并且由于该文件不存在,它会将URL重写为{{1 }}

您只需将其添加到index.php文件的上方:

.htaccess

答案 1 :(得分:0)

我在VM which mirrors my own shared service上试过这个,对我来说效果很好。你在.htaccess目录中有另一个foo吗?如果是这样,那么重写引擎将忽略你在DOCROOT中的那个并改为使用它?

答案 2 :(得分:0)

/foo/目录具有基本身份验证,因此当%{REQUEST_FILENAME}包含不存在的文件/home/the_user/public_html/401.shtml时失败。我不认为这是一个问题,因为基本身份验证工作,当我取消身份验证提示我正在服务标准401文件。通常当缺少这些ErrorDocument文件时,Apache会说此外,在尝试使用ErrorDocument处理请求时遇到404类型的错误。