В постраничной навигации есть форма для быстрого перехода на нужную страницу, но если передавать через неё номер страницы то параметр GET будет записываться в переменную QUERY_STRING и ссылка из такой Код (Text): /папка/папка2/номер_страницы/ превращается в: Код (Text): /папка/папка2/?page=номер_страницы и на указанную страницу не перебрасывает. Как можно сделать чтоб значение из формы записывалось сразу в правильный вид или чтобы модреврайт сам формировал в дальнейшем правильную ссылку. Как я пробовал решить эту проблемму: Код (Text): RewriteEngine On RewriteCond %{QUERY_STRING} \?page=([0-9]+) RewriteRule (.*)\?page=([0-9]+)$ $1/?$2 [R,L] Я попробовал ещё так Код (Text): RewriteRule ^(.*)\?page=([0-9]+)$ $1$2 [R] Результата нет.
Думать, читать и думать, что писать. RewriteRule ^(.*)/p([0-9]+) $1/?page=$2 [L] - это означает, что при открытии страницы /news/p1 этот адрес будет преобразован в /news/?page=1. В PHP-скрипте надо при этом проверять $_GET['page']. В "форме для быстрого перехода" создавать ссылки вида /news/p1, а не с помощью mod_rewrite делать редирект с /news/?page=1 на /news/p1.
В целом у меня mod_rewrite настроен, но когда передаются данные из формы методом GET, а это как раз параметр page, то он автоматически дописывается к ссылке как значение QUERY_STRING Это как раз и сбивает все настройки и получается что я перехажу не по ссылке /dir/12 - где 12 это номер страницы, а по /dir/?page=12 , что эдентично /dir/index.php?page=12 Вот в чём проблемма.
Код (Text): RewriteCond %{QUERY_STRING} ^page=([0-9]+)$ RewriteRule ^(.*)/(.*)/$ http://мой сайт/$1/$2/%1 [R,L] как-то так, кстринги конечно будут висеть в урле, но добавится конд
С этим разобрался. Возникла другая проблемма при передаче слеша в ссылке. Ссылка такого вида: Код (Text): p_ziprar/2209/f=admentor/adserve.asp/ где после f= идёт GET параметр f ( $_GET['f'] ), но из-за того что передаются слеши ссылка кидает на 404, помогите исправить ошибку. Вот правило которое я использую: Код (Text): RewriteRule ^p_([a-z_]+)/([0-9]+)/f=(.*)/ $1.php?id=$2&f=$3 [NC,L]
яваскриптом можно отправлять форму куда захочется изменяя action формыпри клике или просто по событию сабмита.
Я не с формой работаю, с первой проблемой я уже разобрался сам. Проблема с автоматическим экранированием слешев при mod_rewrit'е
дык если ты сам там всем рулишь, напиши правило .* index.php и парси $_SERVER['REQUEST_URI'] эксплодом без всяких слешей и гемороя =)
Если бы это было так просто, меня апач кидает на 404 страницу, он сволочь всё сам экранирует, не зависимо от того что я уже сделал.
Apache не экранирует слэши. Разберитесь с тем кодом, который формирует ссылку вида f=. mod_rewrite для того, чтобы тот адрес, который был запрошен, преобразовать к виду, который будет понятен Вашему скрипту. Если Вы не хотите использовать javascript при отправке формы (чтобы сформировать адрес в виде /dir/12), то можно, конечно, делать редирект, но, на мой взгляд - это излишне.
asokol, у меня нет никакой формы, у меня идёт чтение ZIP архивов и добраться до какого-либо конкретного файла можно только по путям, вот поэтому путь и риходится передавать через GET запрос.
пасинг реквест_ури самый здравый способ. а откуда лезут слеши не очень понятно. надо задать всякие мэджик квотес в офф
magic quote применятся совсем для другого. Этот модуль не экранирует прямые слеши, только обратные, символ NULL и кавычки (одинарные и двойные). Тут он совсем нипричём, к тому же он по умолчанию выключен в новых версиях PHP