[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как убрать гет-параметр при реврайте
7ion
Такая проблема.
Есть условие реврайта.

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
</IfModule>

Как видно - реврайт идет, даже если папка будет существовать.
Ну так вот, если папка существует и написать путь без слеша, то есть http://site.ru/dir, то путь в адресной строке превратится в http://site.ru/dir/?path=dir
Почему так происходит? При запросе http://site.ru/dir/ все в порядке.



Спустя 5 минут, 56 секунд (30.03.2011 - 01:12) inpost написал(а):
В начале дополнительное условие для папки:
RewriteRule ^admin/(.*)$ admin/index.php?route=$1 [L,QSA]

Спустя 10 часов, 4 минуты, 42 секунды (30.03.2011 - 11:17) 7ion написал(а):
Вы меня неправильно поняли.
Папок может быть сколько угодно и с какими угодно именами.

Меня все устраивает в том, как сейчас делается реврайт.
Я про не понимаю, почему в адресную строку вылезает ?path=dir, если папка существует и не поставлен слэш в конце урла. Ведь все преобразования должны идти за кадром!


Спустя 1 час, 13 минут, 21 секунда (30.03.2011 - 12:30) inpost написал(а):
7ion
site.ru/fifochka - это папка или файл?
В данном случае это может быть: fifochka/index.php или при твоём редиректе: fifochka.php (как вариант index.php?path=fifochka). Как ты это объяснишь мне?
Этой папки нет, и файла тоже. Какой из вариантов ты выберешь? Вот поэтому приходится про папки указывать отдельно, или использовать необычный путь для папок, к примеру все папки начинать с какого-то одного символа так, чтобы для реврайта этого символа не было.

Спустя 1 час, 36 минут, 5 секунд (30.03.2011 - 14:06) neadekvat написал(а):
К имеющемуся
RewriteCond %{REQUEST_FILENAME} !-f

Добавьте это:
RewriteCond %{REQUEST_FILENAME} !-d

Т.е. реврайт не вступает в работу, если это имя каталога (!-d) или файла (!-f).

Спустя 36 минут, 40 секунд (30.03.2011 - 14:43) 7ion написал(а):
inpost
neadekvat

Я же говорю - реврайт происходит верно!
Составленное правило

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

делает именно то, что я хочу!

Мне нужно, чтобы реврайт происходил всегда, только если по этому адресу нет файла. Так и происходит.

Но! Если существует папка, то ?path=dir вылезает наружу, а быть этого не должно. Меня интересует, как это убрать из адресной строки.

Спустя 51 минута, 5 секунд (30.03.2011 - 15:34) neadekvat написал(а):
Цитата (7ion @ 30.03.2011 - 14:43)
реврайт происходит верно!

Верно, но не так, как вам надо. Так зачем нервничать? Для начала стоит попробовать то, что вам советуют. Не хотите - не надо. Не мое дело.

Спустя 4 минуты, 54 секунды (30.03.2011 - 15:39) 7ion написал(а):
neadekvat
Дело в том, что правило такое и было, до того как появились эти папки.
Вот я наберу http://site.ru/dir и вместо того, что должно было исполнится по http://site.ru/?path=dir я увижу радостное Forbidden.

Спустя 3 минуты, 10 секунд (30.03.2011 - 15:42) neadekvat написал(а):
Я не понимаю, о чем вы сейчас.

Цитата (7ion @ 30.03.2011 - 01:06)
то путь в адресной строке превратится в http://site.ru/dir/?path=dir

Что вы понимаете под "превратится"? В адресно строке изменится с http://site.ru/dir на http://site.ru/dir/?path=dir или в адресной строке ничего не изменится, но обработается по второму варианту?

Спустя 8 минут, 19 секунд (30.03.2011 - 15:50) 7ion написал(а):
Все происходит верно и именно так, как мне нужно.
Просто почему-то в адресную строку дописывается ?path=dir

Весь сайт состоит из index.php и кучи папочек, допустим.
Если ссылка ведет не на файл, то вместо http://site.ru/jsdkhfsdf/sd/fs/df/dsf/ выполняем http://site.ru/index.php?path=jsdkhfsdf/sd/fs/df/dsf/, а юзер видит в адреске http://site.ru/jsdkhfsdf/sd/fs/df/dsf/. Тут все верно.

В этом суть и дао всего, что нужно сделать. Больше делать ничего не нужно вообще.

Но есть папки dir1, dir2, dir3 и т.д.
Соответственно при переходе http://site.ru/dir1 выполняется http://site.ru/?path=dir1 и все довольны, все счастливы.
Но с какого-то перепугу, если папка существует и в конце пути не стоит слэш (т.е. с http://site.ru/dir1/ все будет как надо) в адреске пишется не http://site.ru/dir1, а http://site.ru/dir1?path=dir1

Я не понимаю, почему это происходит. Колдовал уже и QSA, и с уловиями и чего только не делал. Бесполезно.

Спустя 5 минут, 2 секунды (30.03.2011 - 15:55) neadekvat написал(а):
А если попробовать так:
RewriteRule ^(.*)$ /index.php?path=$1 [L,QSA]

Спустя 2 минуты, 40 секунд (30.03.2011 - 15:58) 7ion написал(а):
Пробовал. Дело в том, что скрипт необязательно лежит в корне.
Нужна универсальность.
Но сейчас еще поколдую в этом направлении.

Спустя 12 минут, 23 секунды (30.03.2011 - 16:10) 7ion написал(а):
Нет, все то же самое, да и плюс еще теперь на http://site.ru/dir1 вообще пустота выходит. На http://site.ru/dir1/ все работает.

Спустя 2 дня, 13 минут, 39 секунд (2.04.2011 - 16:24) 7ion написал(а):
Подниму тему, вдруг кто увидит, знающий решение smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.