Неожиданное поведение htaccess (mod_rewrite и apache) - PullRequest
1 голос
/ 08 июня 2010

Да, 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.

У меня тоже есть rewriteLogs, но они больше не помогли. У моего vhost conf есть Directory тег с Options All, если помогает, я не знаю много об этом.

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Отключить директиву Apache DirectorySlash . Это, кажется, вызывает перенаправление 301.

DirectorySlash Off
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
0 голосов
/ 23 февраля 2011

У меня была похожая проблема.Мое решение состоит в том, чтобы прекратить переписывать URL на «плохих» путях (каталоги без косой черты в конце):

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*[^/])$ $1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/*$ index.php?route=$1 [L,QSA]
0 голосов
/ 08 июня 2010

Попробуйте один раз:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$    index.php?url=$1 [L,QSA]
...