我的虚拟主机根目录中有一个名为“foo”的目录。 我试图拦截一个名为“foo”的不存在文件的请求,并将它们重写为一个PHP文件,.htaccess文件如下所示:
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} /foo RewriteRule ^(.*)$ router.php [L] </IfModule>
所有我一直从服务器获取“/ foo”的GET请求是301redirect到“/ foo /”(目录)。 为什么Apache在处理规则之前做这个? 我是否缺lessconfiguration选项? 或者可以这样做吗?
301redirect来自mod_dir一部分的DirectorySlash指令。
我怀疑你的.htaccess不工作,由于一个或两个:
AllowOverrideconfiguration为不允许.htaccess文件。 .htacess文件位于 /foo/目录中,因此mod_dir在处理.htaccess文件之前应用其301redirect。 记住文件系统总是优先
服务器上的文件系统将始终优先于重写的URL。 例如,如果您有一个名为“foo”的目录,并且该目录内有一个名为“router.php”的文件,则不能将URLredirect到“ http://domain.com/foo ”。 会发生什么事是Apache进入“foo”目录,并没有看到重写指令。
要解决这个问题,只需重命名你的目录(在开头或结尾添加一个下划线是一个简单的方法)。