追踪一个奇怪的 Apache 重写

追踪一个奇怪的 Apache 重写

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 也可能是一个问题。

相关内容