Есть условие реврайта.
<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]
RewriteRule ^admin/(.*)$ admin/index.php?route=$1 [L,QSA]
Спустя 10 часов, 4 минуты, 42 секунды (30.03.2011 - 11:17) 7ion написал(а):
Вы меня неправильно поняли.
Папок может быть сколько угодно и с какими угодно именами.
Меня все устраивает в том, как сейчас делается реврайт.
Я про не понимаю, почему в адресную строку вылезает ?path=dir, если папка существует и не поставлен слэш в конце урла. Ведь все преобразования должны идти за кадром!
Папок может быть сколько угодно и с какими угодно именами.
Меня все устраивает в том, как сейчас делается реврайт.
Я про не понимаю, почему в адресную строку вылезает ?path=dir, если папка существует и не поставлен слэш в конце урла. Ведь все преобразования должны идти за кадром!
Спустя 1 час, 13 минут, 21 секунда (30.03.2011 - 12:30) inpost написал(а):
7ion
site.ru/fifochka - это папка или файл?
В данном случае это может быть: fifochka/index.php или при твоём редиректе: fifochka.php (как вариант index.php?path=fifochka). Как ты это объяснишь мне?
Этой папки нет, и файла тоже. Какой из вариантов ты выберешь? Вот поэтому приходится про папки указывать отдельно, или использовать необычный путь для папок, к примеру все папки начинать с какого-то одного символа так, чтобы для реврайта этого символа не было.
site.ru/fifochka - это папка или файл?
В данном случае это может быть: fifochka/index.php или при твоём редиректе: fifochka.php (как вариант index.php?path=fifochka). Как ты это объяснишь мне?
Этой папки нет, и файла тоже. Какой из вариантов ты выберешь? Вот поэтому приходится про папки указывать отдельно, или использовать необычный путь для папок, к примеру все папки начинать с какого-то одного символа так, чтобы для реврайта этого символа не было.
Спустя 1 час, 36 минут, 5 секунд (30.03.2011 - 14:06) neadekvat написал(а):
К имеющемуся
Добавьте это:
Т.е. реврайт не вступает в работу, если это имя каталога (!-d) или файла (!-f).
RewriteCond %{REQUEST_FILENAME} !-f
Добавьте это:
RewriteCond %{REQUEST_FILENAME} !-d
Т.е. реврайт не вступает в работу, если это имя каталога (!-d) или файла (!-f).
Спустя 36 минут, 40 секунд (30.03.2011 - 14:43) 7ion написал(а):
inpost
neadekvat
Я же говорю - реврайт происходит верно!
Составленное правило
делает именно то, что я хочу!
Мне нужно, чтобы реврайт происходил всегда, только если по этому адресу нет файла. Так и происходит.
Но! Если существует папка, то ?path=dir вылезает наружу, а быть этого не должно. Меня интересует, как это убрать из адресной строки.
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.
Дело в том, что правило такое и было, до того как появились эти папки.
Вот я наберу 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, и с уловиями и чего только не делал. Бесполезно.
Просто почему-то в адресную строку дописывается ?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 написал(а):
Подниму тему, вдруг кто увидит, знающий решение
