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

Чпу, mod_rewrite и .htaccess

07.10.2013, 18:34. Показов 7455. Ответов 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
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 3
11.11.2013, 23:45
Студворк — интернет-сервис помощи студентам
есть очень простой тест в Гугле:
site:site.com
site:site.com/
так вот, поисковик выдает разное число страниц

Добавлено через 4 минуты
Цитата Сообщение от z-17 Посмотреть сообщение
Ale-x3, это бред, а не дубли страниц.
Если вы сеошник, то должны понимать что поисковики не такие тупые, и если уж они способны склеить домены www.site.ru и site.ru, то проблем со слешем уж точно не будет.

Программисты не воспринимают site.com и site.com/ как один, а это и есть один. И поисковики пишут эти самые программисты.
а для склеивания www.site.ru и site.ru специально прописывается директива в htaccess, ибо поисковики как раз тупые, и для них это разные домены!
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
21.11.2013, 23:51  [ТС]
Товарищи, я снова вернулся за помощью

В файле .htaccess есть правила которые судя по всему мешают друг другу. Вот эти правила.

Code
1
2
RewriteRule ^interesnye-fakty/page/(.+)$ interesnye-fakty.php?page=$1 [L]
RewriteRule ^interesnye-fakty/(.*)$ interesnye-fakty-post.php?id=$1 [L]
Сначала у меня было добавлено только одно (первое) правило для "пейджинга" и всё нормально работало. После этого я добавил другое правило в котором хочется реализовать ЧПУ. В текущем состоянии оно работает, но теперь при переходе на вторую страницу interesnye-fakty/page/2 у меня появляется ошибка 404, которая срабатывает из-за этого правила.

Code
1
ErrorDocument 404 http://мой_сайт.ru/error404.php
Можно ли как-то изменить конструкцию что бы одновременно работало и ЧПУ для отдельных статей и "пейджинг" для просмотра анонсов? Заранее благодарю за ответы и любую помощь.

Добавлено через 46 минут
Цитата Сообщение от by-bad Посмотреть сообщение
Заранее благодарю за ответы и любую помощь.
Решение найдено.

Вместо любого символа неограниченное кол-во раз (.*) использовал только цифры ([0-9]+) - вроде работает.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
28.11.2013, 23:22  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)/?$ [NC]
RewriteRule . anekdoty-search.php?search=%1&page=%2
KOPOJI, благодаря вам сейчас у меня получается пользоваться ссылкой вида anekdoty/search/?search=%ED%E0%20%FE%E3%E5/page/2

Но теперь я столкнулся с другой проблемой. Если вручную на конце "пейджера" добавить какие-нибудь символы, например anekdoty/search/?search=%ED%E0%20%FE%E3%E5/page/2sdfg, вся конструкция рушится. По идее, в таком случае должна была бы появиться ошибка 404 которая прописана так

MySQL
1
ErrorDocument 404 http:// мой_сайт.ru /error404.php
Но она не появляется, а при переходе на вторую страницу у меня получается

...%ED%E0%20%FE%E3%E5/page/2sdfg/page/2

Как сделать так, что бы на конце было разрешено использовать только цифры? Пробовал подставить ([0-9]+) вместо (\d+?) - меня перекидывает на первую страницу, и в "пейджере" сохраняется вся белиберда которую я дописывал к запросу. Это можно как-то исправить?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 18:40
вообще такого не должно быть. ^ означает начало строки, $ означает конец строки..
Даже не знаю, попробуйте так..
Code
1
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)(?!\D)/?$ [NC]
Правда, не знаю, поддерживаются ли такие условия в mod_rewrite
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 19:02  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
попробуйте так..
Попробовал - аналогично. В целом мне надо как-то ограничить использование любых символов кроме цифр и тогда всё станет на свои места - цифры это номера страниц, а если кто-то допишет к ним что-то, появится ошибка 404. Но как сделать что бы можно было использовать только цифры?!

Почему на конце стоит слеш? И что означает вопросительный знак после него?

Цитата Сообщение от KOPOJI Посмотреть сообщение
/page/(\d+?)(?!\D)/?$ [NC]
У меня урл заканчивается так /page/2 - без слеша.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 19:07
слэш со знаком вопроса - "или есть слэш, или его нет"
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 19:10  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
слэш со знаком вопроса - "или есть слэш, или его нет"
Ок, а как всё таки сделать что бы на конце можно было использовать только цифры?
Я пробовал подставить ([0-9]+) вместо (\d+?), но если я дописываю чего-нибудь кроме цифр - ничего не происходит.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 19:14
Цитата Сообщение от by-bad Посмотреть сообщение
Но как сделать что бы можно было использовать только цифры?!
сама по себе, регулярка верная (почти, со слэшем я чуть промахнулся)..
А попробуйте от обратного:
Code
1
2
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)[^\d]+?$
RewriteRule . /error.php [R=301,L]
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 20:06  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
А попробуйте от обратного:
Попробовал - при переходе по ссылке на вторую страницу у меня появляется первая, а в урле всё дублируется /page/2/page/2/page/2. Хм...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 20:19
Не может быть. Редирект сделали на страницу с ошибкой..?
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 20:22  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Редирект сделали на страницу с ошибкой..?
Так не подойдёт ?
MySQL
1
ErrorDocument 404 http:// мой_сайт.ru /error404.php
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 20:24
Нет. Имелось в виду в rewriterule, вместо "/error.php"
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 20:29  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Не может быть. Редирект сделали на страницу с ошибкой..?
Ну я скопировал предложенный вами код
Цитата Сообщение от KOPOJI Посмотреть сообщение
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)[^\d]+?$
RewriteRule . /error.php [R=301,L]
В данном случае всё так как я уже и говорил.
Цитата Сообщение от by-bad Посмотреть сообщение
Попробовал - при переходе по ссылке на вторую страницу у меня появляется первая, а в урле всё дублируется /page/2/page/2/page/2
Добавлено через 30 секунд
На страницу с ошибкой не перебрасывает!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
29.11.2013, 20:36
значит, не срабатывает.. я не знаю, как это исправить через .htaccess, с GET-параметрами особо не работал.. Все, что я могу подсказать - проверять в самом скрипте, на пыхе. Как-то так
PHP
1
2
3
4
5
if(!preg_match('~^\\d+?$~', $_GET['page']))
{
    header('Location: /error404.php');
    exit;
}
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
29.11.2013, 20:37  [ТС]
Что-то мы с вами как-то не в ту степь вообще пошли, мне так кажется.
С помощью вашего предыдущего варианта
MySQL
1
2
RewriteCond %{QUERY_STRING} ^search=([^/]+?)/page/(\d+?)/?$ [NC]
RewriteRule . interesnye-fakty-search.php?search=%1&page=%2
У меня всё работает как надо, т.е. я могу перейти по ссылке .../interesnye-fakty/search/?search=%ED%E0%20%FE%E3%E5 или .../interesnye-fakty/search/?search=%ED%E0%20%FE%E3%E5/page/2 на вторую страницу результатов поиска.

Но теперь, надо как-то "ограничить" написание страниц - что бы там были только цифры. Например, если пользователь самостоятельно добавил к номеру страницы какие-нибудь символы, должна появиться страница с ошибкой 404 которая прописана как ErrorDocument. ...FE%E3%E5/page/2dfghls - должна появиться страница с ошибкой, а у меня открывается первая страница результатов поиска, а в урлах для пейджера появляется /page/2dfghls/page/2

Тоже самое я сделал для других страниц, но без RewriteCond. Вот пример:

MySQL
1
RewriteRule ^interesnye-fakty/date/([^/]+?)/page/([0-9]+)$ interesnye-fakty-date.php?date=$1&page=$2 [L]
Так на конце урла может быть только цифра. Если дописать что-то в конце - перебрасывает на ошибку, как и должно быть. В общем я уже совсем запутался, надеюсь на Вашу квалифицированную помощь.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
02.12.2013, 23:05  [ТС]
Цитата Сообщение от KOPOJI
это правило просто попадает под другое.
Возможно что так и есть, понимаю что я многого хочу, но не могли бы вы взглянуть на мои правила?
Может вы ошибку сразу увидите...

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
RewriteEngine on
Options +FollowSymlinks
Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteRule ^interesnye-fakty$ interesnye-fakty.php [L]
RewriteRule ^interesnye-fakty/([0-9]+)$ interesnye-fakty-post.php?id=$1 [L]
RewriteRule ^interesnye-fakty-ne-najdeny$ interesnye-fakty-ne-najdeny.php [L]
RewriteRule ^interesnye-fakty/page/([0-9]+)$ interesnye-fakty.php?page=$1 [L]
RewriteRule ^interesnye-fakty-otpravit-kommentarij$ interesnye-fakty-otpravit-kommentarij.php [L]
RewriteRule ^interesnye-fakty/date/([0-9-.]+)$ interesnye-fakty-date.php?date=$1 [L]
RewriteRule ^interesnye-fakty/date/([^/]+?)/page/([0-9]+)$ interesnye-fakty-date.php?date=$1&page=$2 [L]
RewriteRule ^interesnye-fakty/search/$ interesnye-fakty-search.php [L]
RewriteCond %{QUERY_STRING} ^fakty=([^/]+?)/page/(\d+?)$ [NC]
RewriteRule . interesnye-fakty-search.php?fakty=%1&page=%2 [L]
 
RewriteRule ^interesnye-fakty/tag/([0-9a-z-]+)$ interesnye-fakty-tags.php?tag=$1 [L]
RewriteRule ^interesnye-fakty/tag/(.*)/page/([0-9]+)$ interesnye-fakty-tags.php?tag=$1&page=$2 [L]
 
ErrorDocument 404 [url]http://moi_site.ru/error404.php[/url]

К примеру, interesnye-fakty-date.php?date=14.11.2013&page=2 с помощью правила из 13-ой строки обрабатывается так как надо - пейджер работает на ура и всё остальное, правда дата передаётся через _POST.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.12.2013, 23:15
Кажется, я понял, в чем проблема
by-bad, а если в строке вбивать не interesnye-fakty?search=.... а, к примеру, вот так:
interesnye-fakt?search=... (без одной буквы, ну или изменить на любое другое название, отличное от имени файла)
Попробуйте, и отпишитесь о результатах
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
02.12.2013, 23:28  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Попробуйте, и отпишитесь о результатах
Вы сейчас хотите что бы я ссылки без ЧПУ проверил?
Зашёл так .../interesnye-fakty-search.php?fakty=%ED%E0+%FE%E3%E5 всё работает как надо (без ЧПУ).
Так тоже всё отлично .../interesnye-fakty-search.php?fakty=%ED%E0+%FE%E3%E5&page=2 с пейджером (без ЧПУ).
Попробовал удалить букву перед переменной, как вы посоветовали - появляется ошибка 404 (ErrorDocument 404)

Далее попробовал с теми правилами которые прописаны и на ссылках с ЧПУ.
Зашёл так: .../interesnye-fakt/search/?fakty=%ED%E0+%FE%E3%E5 (удалил букву как вы попросили) - появилась ошибка 404.

Или я что-то не то делаю?

Добавлено через 4 минуты
PS: у меня вместо ?search форма передаёт ?fakty, поэтому у меня немножко иначе, но суть та же.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.12.2013, 23:31
Нет. Перейдите по адресу http://site.ru/interesnye-fakt?search=foo/page/2 и http://site.ru/interesnye-fakt?search=foo/page/2f
Что получаете в первом и во втором случае?
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
02.12.2013, 23:48  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Что получаете в первом и во втором случае?
В обоих случаях редирект на ошибку 404 (ErrorDocument 404).
Но мне кажется чего-то в урле не хватает... или расширения .php или слеша.

Добавлено через 1 минуту
Ссылка без ЧПУ выглядит так: interesnye-fakty-search.php?fakty=%ED%E0+%FE%E3%E5&page=2
Ссылка с ЧПУ выглядит так: /interesnye-fakty/search/?fakty=%ED%E0+%FE%E3%E5/page/2

Добавлено через 10 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
Перейдите по адресу http://site.ru/interesnye-fakt?search=foo/page/2
Обработчик поиска не interesnye-faktу.php а interesnye-fakty-search.php, если вы намекаете на то что у меня открывается первый файл, то нет - там мета данные другие, title и всё такое - разница была бы заметна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2013, 23:48

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru