Неожиданное поведение HTACCESS (MOD_REWRITE и APACHE)
-
24-10-2019 - |
Вопрос
Да, mod_rewrite сводит меня с ума.
Вот проблема:
мой htaccess
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Когда я пытаюсь получить доступ к странице advantix
(так адрес был www.mywebsite.com/advantix
), меня перенаправляют на advantix/?url=advantix
Глядя на журнал доступа, у меня есть подозрительный 301 в середине
"GET /advantix HTTP/1.1" 301 335 "-" "Mozilla/5.0"
"GET /advantix/?url=advantix HTTP/1.1" 200 186 "-" "Mozilla/5.0"
Есть одна важная деталь: Advantix - это каталог.
Итак, если я прокомментирую это правило, advantix
Переходит в папку и перечислите файлы.
Почему он применяется автоматически /
Если есть сопоставление папки?
Я не хочу добраться до папки, я хочу добраться index.php?url=advantix
с призывом к advantix
.
У меня тоже есть переписание, но они не помогли больше. У моего Vhost Conf есть Directory
тег с Options All
, если помогает, я мало что знаю об этом.
Решение
Выключить DirectorySlash Apache Directive. Похоже, что это вызывает перенаправление 301.
DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Другие советы
Попробуйте это один раз:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
У меня была похожая проблема. Мое решение состоит в том, чтобы перестать переписать URL на «плохих» путях (каталоги без смены в конце):
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ $1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/*$ index.php?route=$1 [L,QSA]