Вопрос

Да, 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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top