tl:dr;您将如何追踪不应该发生的 URL 重写?
详细信息:我有一个.htaccess 文件,它很简单:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
重写已启用。当我访问如下 URL 时:
foo.com/index.php
我得到了我期望的结果。
foo.com/index/
但是将重定向到foo.com/index.htm
所以在我的应用程序路线中foo.com/index/books/fiction
将会变成foo.com/index.htm/books/fiction
这个应该在哪里设置?我以为它可能在我的 vhosts 文件中,但它看起来像:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
etc...
对我来说这看起来非常普通。然后我想可能是我的 DirectoryIndex(位于 apache2 的 mods-enabled 目录中)需要指定,所以我将其更改为:
<IfModule mod_dir.c>
DirectoryIndex index.php index.phtml index.html
</IfModule>
但运气不好。我不知道还能去哪里找。有什么建议吗?
答案1
在您的日志环境中激活调试日志并调用该 URL。Apache 应该会创建一个详细的日志来记录它发生的位置。至少 nginx 在调试模式下是这样做的。
我不知道为什么会发生这种情况,但你可以尝试:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
而不是用相反的方式进行重写。MultiViews 也可能是一个问题。