2010-06-08 2 views
1

Да, mod_rewrite сводит меня с ума.Неожиданное поведение htaccess (mod_rewrite и apache)

Вот проблема:

мой 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" 

Существует одна важная деталь: . Favorix - это каталог.

Итак, если я прокомментирую это правило, advantix отправится в папку и перечислит файлы.

Почему оно применяется автоматически /, если есть папка, соответствующая?

Я не хочу, чтобы достичь папку, я хочу, чтобы достичьindex.php?url=advantixс вызовомadvantix.

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

ответ

1

Выключите директивы DirectorySlash Apache. Кажется, это вызывает перенаправление 301.

DirectorySlash Off 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 
+0

спасибо, он работает. я не нашел эту директиву! – apelliciari

+0

без проблем. хотя я знал об этой функциональности, но до сих пор не знал о конкретной директиве. –

0

Попробуйте однажды:

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

это, очевидно, взять меня в список папок, и я не хочу этого. – apelliciari

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^