我的问题是当我访问物理目录时,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服务器上运行不正常。我有点失落。
答案 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类型的错误。