我在 Apache22 服务器上有一个 .htaccess 文件。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /index.php?p=$1 [L]
这个想法是,当请求是 /testpage 时,它应该被重写为/index.php?p=testpage
。问题是 apache 在我的文件之前执行了写入,因此实际请求是testpage.xml
实际存在的。因此,第一个 RewriteCond 是较新的 true,并且我的重写规则从未应用于请求/testpage
。
因此,apache 在我的 .htaccess-files 激活之前进行重写/testpage => /testpage.xml
。modrewritelog 也表明请求的文件是/testpage.xml
。
该服务器应在 FreeBSD 服务器上进行标准设置。我知道这在其他服务器上也可以工作。
答案1
我猜你已经打开Options MultiViews
了,并且mod_negotiation
在处理该请求之前mod_rewrite
。