The 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), поэтому я изменил его на:
<IfModule mod_dir.c>
DirectoryIndex index.php index.phtml index.html
</IfModule>
Но не повезло. Я не уверен, где еще искать. Какие-либо предложения?
Активируйте ведение журнала отладки в среде ведения журнала и вызовите этот URL-адрес. Apache должен создать подробный журнал там, где он был в дальнейшем. По крайней мере, это то, что nginx делает в режиме отладки.
Понятия не имею, почему это происходит, но вы можете попробовать:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
Вместо вашего переписывания, которое проверяет наоборот. MultiViews также может быть проблемой.