Форум программистов, компьютерный форум, киберфорум
Apache, htaccess
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/33: Рейтинг темы: голосов - 33, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117

Чпу, mod_rewrite и .htaccess

07.10.2013, 18:34. Показов 6888. Ответов 68
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наворотил делов так что вчера сайт вообще не отвечал, из-за условий в файле .htaccess он попадал в цикличность и выдавал сообщение "состояние перенаправления". На данный момент от цикличности избавился, дописал ещё несколько условий и теперь я опять в ступоре.

Надо преобразовать адрес anekdoty-date.php?date=07.10.2013&page=2 в anekdoty/date/07.10.2013/page/2.

Пробовал сделать так:
PHP
1
RewriteRule ^anekdoty/date/(.*)/post/(.*)$ anekdoty-date.php?date=$1&page=$2 [L]
В файле уже есть несколько условий, возможно составленных не правильно. Потому что при таком запросе меня перебрасывает на другой файл обработчик а не на anekdoty-date.php

Буду признателен за любую помощь и советы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.10.2013, 18:34
Ответы с готовыми решениями:

ЧПУ htaccess и mod_rewrite?
Всем доброго для! Кто может помогите разобраться с проблемой. Перечитал много тем а решения так и не нашел. Вот пример ссылки на...

Mod_rewrite и ЧПУ
Всем привет. Уже 2-ой день мучаюсь над реализацией ЧПУ для своего сайта. Хочу реализовать это дело через mod_rewrite. На локальной машине...

mod_rewrite ЧПУ
Приветствую. Понимая, что подобных тем тьма, не хотел создавать новую но времени у меня нет особо чтоб рыскать ответ на мой вопрос, с...

68
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
21.10.2013, 23:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TAB Посмотреть сообщение
Code
1
2
RewriteRule ^anekdoty/search/([%\dA-F]{3,})$ anekdoty-search.php?search=$1 [NC,L]
RewriteRule ^anekdoty/search/([%\dA-F]{3,})/page/(\d+)$ anekdoty-search.php?search=$1&page=$2 [NC,L]
Попробовал вашу конструкцию, выдаёт ошибку 404. Я правильно изменил action в форме?

HTML5
1
action="anekdoty/search/$_GET['search']"
Может быть что таким образом форма не передаёт поисковой запрос обработчику ?
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
22.10.2013, 09:21
Code
1
2
RewriteRule ^anekdoty/search/([+%\dA-F]+)$ anekdoty-search.php?search=$1 [NC,L]
RewriteRule ^anekdoty/search/([+%\dA-F]+)/page/(\d+)$ anekdoty-search.php?search=$1&page=$2 [NC,L]
Перехват отправки формы и переход по преобразованной ссылке вида anekdoty/search/%EC%F3 или anekdoty/search/%EC%F3/page/3:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('#searchform').on('submit', function(event) {
                    var action  = $(this).attr('action'),
                        search  = $(this).find('[name="search"]').val(),
                        page    = $(this).find('[name="page"]').val(),
                        path    = window.location.pathname,
                        pos     = path.indexOf(action);
 
                    if ( ~pos )
                        path = path.substring(0, pos);
 
                    path = path.substring(0, path.lastIndexOf('/') + 1);
                    path += action + encodeURIComponent(search) + (page ? '/page/' + page : '');
                    window.location.pathname = path;
 
                    event.preventDefault();
                });
            });
        </script>
    </head>
    <body>
        <form id="searchform" name="searchform" action="anekdoty/search/">
            <input type="text" name="search" placeholder="Поиск по анекдотам" />
            <input type="hidden" name="page" value="" />
        </form>
    </body>
</html>
Остаётся только подставлять значение в скрытое поле page средствами PHP.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
22.10.2013, 16:01  [ТС]
TAB, спасибо за помощь, но у меня так ничего и не получилось. Использовал ваши правила для файла .htaccess, внедрил скрипт - ради "теста" в скрытое поле я ввёл данные вручную и у меня все ровно появляется ошибка 404.

Добавлено через 2 часа 20 минут
Немного повозился, добавил в .htaccess вот такое условие:

Code
1
RewriteRule ^anekdoty/search/$ anekdoty-search.php [L]
"Экшн" в форме отправки сделал так:

Code
1
action="anekdoty/search/"
Теперь на выходе у меня получается вот такой результат:

anekdoty/search/?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0&p age=5

Пытался убрать ?search= - ничего не получилось. Пытался постраничную навигацию привести к общему виду - тоже мимо.

В целом, я согласен если поисковой запрос будет выглядеть вот так ?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0 но хотелось бы что бы странички на конце имели вид /page/5 а не &page=5.

Пробовал добавить условие:

Code
1
RewriteRule ^anekdoty/search/(.*)/page/(.+)$ anekdoty-search.php?search=$1&page=$2 [L]
Но тогда, при переходе на другую страницу с результатами у меня к концу строки постоянно добавлялись /page/2,3,4,5... т.е. строка превращалась в anekdoty/search/?search=запрос/page/2/page/2/page/2... и при этом всегда показывается первая строка...

Товарищи, подскажите пожалуйста как исправить эту ситуацию?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.10.2013, 21:56
Есть, например, Punycode. Вообще, в .htaccess спокойно поддерживаются русские буквы (по-крайней мере, в UTF-8 точно, в других не знаю).
Цитата Сообщение от by-bad Посмотреть сообщение
Теперь на выходе у меня получается вот такой результат:
Тут два варианта. Либо использовать POST, а его перегонять в нужную строку и составлять URL как должно быть, после чего делать редирект на пыхе. Либо использовать редирект сервера, как-то так
Code
1
2
RewriteCond %{QUERY_STRING} ^search=(.+)$ [NC]
RewriteRule ^(.+)$ /$1/%1/ [R=301,L]
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 00:56  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Вообще, в .htaccess спокойно поддерживаются русские буквы (по-крайней мере, в UTF-8 точно, в других не знаю).
У меня кодировка windows-1251
Цитата Сообщение от KOPOJI Посмотреть сообщение
Либо использовать редирект сервера, как-то так
Попробовал, в
Code
1
%{QUERY_STRING}
попадает адрес начальной страницы, т.е. anekdoty-search.php в итоге он меня перекидывает на страницу anekdoty-search.php/25E6%252525E0/%25252525EF%25252525F0%25252525EE+%25252 525EC%25252525F3%25252525E6%25252525E0/%2525.... а оттуда сразу же вылетает ошибка 403 Беда.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.10.2013, 09:12
добавьте флаг NE
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 11:15  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
добавьте флаг NE
Теперь, 301 Moved Permanently - The document has moved here.
сайт.ру/anekdoty-search.php/ìóæ+è+æåíà/ìó...%EC%F3%E...
Жуть
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.10.2013, 11:19
с кодировкой разберитесь
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 11:37  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
с кодировкой разберитесь
Кодировка везде одинаковая. До добавления флага NE "крокозябр" нигде не было.

Добавлено через 1 минуту
Тем более, после редиректа запрос в строке браузера получается символов на 500...

Добавлено через 12 минут
KOPOJI, предположим пускай в строке остаётся ?search=, т.е. она теперь выглядит у меня таким образом:

Code
1
anekdoty/search/?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0&page=5
Как преобразовать её в

Code
1
anekdoty/search/?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0/page/5
Думаю так тоже сойдёт...

Какое условие нужно для первых скобок, что бы страницки на конце УРЛа отображались нармально ?!
Code
1
RewriteRule ^anekdoty/search/?search=(......)/page/(.+)$ anekdoty-search.php?search=$1&page=$2 [L]
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.10.2013, 19:51
Ну это надо исправить в скрипте, который формирует ссылки - это будет самый простой способ.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 20:07  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Ну это надо исправить в скрипте, который формирует ссылки - это будет самый простой способ.
KOPOJI, ссылки подставляются из БД. Но тут речь идёт о поисковом запросе, которого в БД быть не может и который передаётся из формы в строку браузера уже закодированным.
Учитывая моё слабое знание всяких там наворотов, на данный момент хотелось бы что бы строка

anekdoty/search/?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0&p age=5

была доступна по адресу

anekdoty/search/?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0/page/5

Пробовал вот такое условие:

RewriteRule ^anekdoty/search/?search=(.*)/page/(.+)$ anekdoty-search.php?search=$1&page=$2 [L]

Но постраничная навигация почему-то не работает - как я понял она каким-то образом захватывает всё что содержится после самого поискового запроса, т.е. /page/5 добавляется к закодированным символам.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.10.2013, 20:13
У вас пагинация.хранится в бд? Странно и неразумно.. А обратиться к гет-параметрам можно только через query_string
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 20:25  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
У вас пагинация.хранится в бд?
Нет, постраничная навигация не хранится в бд.
У меня есть форма посика. Пользователь вводит в неё например "муж и жена". Введённые данные передаются файлу обработчику через GET (строку браузера, ?search=....) который достаёт из базы все записи в которых найдены поисковый запрос. Этот же файл делит результаты на страницы.

В итоге я получаю anekdoty-search.php?search=запрос&page=страница. Например вот так у меня выглядят результаты поиска anekdoty/search/?search=%EC%F3%E6+%E8+%E6%E5%ED%E0 на этой странице 20 анекдотов, следующие 20 уже на странице anekdoty/search/?search=%EC%F3%E6+%E8+%E6%E5%ED%E0&page=2 и т.д.

Помогите мне составить правило для .htaccess которое бы позволяло получить содержимое второй страницы по "новому" адресу anekdoty/search/?search=%EC%F3%E6+%E8+%E6%E5%ED%E0/page/2 если это возможно конечно.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.10.2013, 21:12
Цитата Сообщение от by-bad Посмотреть сообщение
Этот же файл делит результаты на страницы.
Ну я про него и говорил. Скажите, в чем проблема замените в генерации ссылки, чтобы он вместо &page=N делал /page=N ?

Добавлено через 4 минуты
Цитата Сообщение от by-bad Посмотреть сообщение
Помогите мне составить правило
Code
1
2
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)/?$ [NC]
RewriteRule . anekdoty-search.php?search=%1&page=%2
Только не понимаю, что оно вам даст, если все равно ссылка у вас старая
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
23.10.2013, 21:36  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Скажите, в чем проблема замените в генерации ссылки, чтобы он вместо &page=N делал /page=N ?
В этом нет проблем, я так и делаю - видимо вы меня не правильно поняли.
Цитата Сообщение от KOPOJI Посмотреть сообщение
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)/?$ [NC]
RewriteRule . anekdoty-search.php?search=%1&page=%2
Бинго! То, что доктор прописал. Ваш код в очередной раз подошёл как нельзя лучше Огромное вам спасибо!
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 3
11.11.2013, 15:36
Добрый день!
Обращаюсь за помощью к опытным программистам, т.к. попытки найти решение самостоятельно уже неоднократно загоняли сайт в циклическую ссылку
нужно сделать редирект 301 с домена site.com на site.com/
вот последний неудачный вариант:

RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule ^(.*)$ http://site/$1 [R=301,L]
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
11.11.2013, 15:40
site.com и site.com/ суть одно и тоже. Возможно задача понята неверно?
0
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 3
11.11.2013, 17:08
В том то и дело, что для поисковых роботов это разные домены
и они выдают дублирование страниц, а это уже проблема номер один для СЕО! А я СЕОшник, и мне необходимо организовать этот редирект
я пообщался со многими программистами, большинство тоже воспринимают site.com и site.com/ как один и тот же домен и не знают, как организовать нужный мне редирект
0
0 / 0 / 0
Регистрация: 14.09.2013
Сообщений: 13
11.11.2013, 18:34
Ale-x3, это бред, а не дубли страниц.
Если вы сеошник, то должны понимать что поисковики не такие тупые, и если уж они способны склеить домены www.site.ru и site.ru, то проблем со слешем уж точно не будет.

Программисты не воспринимают site.com и site.com/ как один, а это и есть один. И поисковики пишут эти самые программисты.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.11.2013, 19:54
Насколько мне известно, слэш в конце доменного имени (в случае, когда только он в адресе, т.е. REQUEST_URI == имени домена) всегда убирается. И не может быть, чтобы поисковики считали разными домены site.com и site.com/ - такое может быть только для других адресов, например, site.com/foo и site.com/foo/ могут расцениваться как разные.

Добавлено через 56 секунд
z-17, не знаю, как с этим обстоит дела на данный момент, но сравнительно недавно, может, с полгода назад, это было именно так.

Добавлено через 1 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение
И не может быть
уточнение: я о таком никогда не слышал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2013, 19:54
Помогаю со студенческими работами здесь

Настройка mod_rewrite (ЧПУ)
имеется сайт на котором нужно сделать ЧПУ на htaccess страницы имеют вид http://mysyte.ru/page.php?title_url=mypage&amp;id=30 первую...

Не работает ЧПУ (mod_rewrite)
Уже голову себе сломал. Есть такая ссылка: &lt;a href=&quot;/category/23&quot;&gt;Категория с id=23&lt;/a&gt; Теперь условие в .htaccess RewriteEngine on ...

Проблемы с настройкой ЧПУ в mod_rewrite
Уже не первый День и не первый раз пытаюсь осилить это ВЕЛИКОЛЕПНЫЙ модуль, но походу без посторонней помощи, более опытных специалистов...

Реализация ЧПУ на сайте (mod_rewrite)
Всем доброго времени суток. В общем, не хватает нервов уже на этот mod_rewrite и htaccess,поэтому пишу сюда. Подскажите,как правильно...

mod_rewrite - как сделать ЧПУ?
Как через ф-цию mod_rewrite сделать ЧПУ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru