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

Чпу, mod_rewrite и .htaccess

07.10.2013, 18:34. Показов 6885. Ответов 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
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
07.10.2013, 20:26
Code
1
2
3
4
5
6
// Где-то вначале
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
// ..
RewriteRule ^anekdoty/date/(\d{2}\.\d{2}\.\d{4})/page/(\d+)$ anekdoty-date.php?date=$1&page=$2 [L]
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
07.10.2013, 20:41  [ТС]
Цитата Сообщение от TAB Посмотреть сообщение
Code
1
2
3
4
5
6
// Где-то вначале
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
// ..
RewriteRule ^anekdoty/date/(\d{2}\.\d{2}\.\d{4})/page/(\d+)$ anekdoty-date.php?date=$1&page=$2 [L]
RewriteRule .* - [L] у меня есть в начале файла. Есть и RewriteCond только значения установлены с восклицательным знаком, т.е. вот так:

PHP
1
2
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
В общем изменил всё так как вы порекомендовали, но результата это не дало.

Путём научного метода "тыка" я выяснил что в моём запросе происходит открытие другого файла обработчика. Вероятнее всего это происходит из-за вот этих условий:

PHP
1
2
RewriteRule ^anekdoty/([a-z0-9-]+)$ anekdoty-cat.php?cat=$1 [L]
RewriteRule ^anekdoty/(.*)/page/(.*)$ anekdoty-cat.php?cat=$1&page=$2 [L]
Хотя тут я работаю с файлом anekdoty-cat.php а во втором случае anekdoty-date.php - где-то тут есть ошибка, потому что при запросе anekdoty/date/07.10.2013/page/2 меня перебрасывает на файл с категориями, по непонятной мне причине.

TAB, не могли бы подсказать в чём проблема?
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
07.10.2013, 20:50
Чтобы понять причину, нужны все правила mod_rewrite.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
07.10.2013, 21:19  [ТС]
Цитата Сообщение от TAB Посмотреть сообщение
Чтобы понять причину, нужны все правила mod_rewrite.
Вот мой файл .htaccess:

PHP
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
35
<files .htaccess>
order allow,deny
deny from all
</files>
 
RewriteEngine on
RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]
 
RewriteCond %{QUERY_STRING} ^utm_source
RewriteRule ^.*$ http://%{HTTP_HOST}/$0? [R=301,L,E=RWR:yes]
 
RewriteCond %{HTTP_HOST} ^www.сайт.ru$ [NC]
RewriteRule ^(.*)$ http://сайт.ru/$1 [R=301,L]
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://сайт.ru/$1 [R=301,L]
 
Options +FollowSymlinks
Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteRule ^anekdot/(.*)$ anekdoty-post.php?id=$1 [L]
RewriteRule ^anekdoty$ anekdoty.php [L]
RewriteRule ^anekdoty/page/(.*)$ anekdoty.php?page=$1 [L]
 
RewriteRule ^anekdoty/([a-z0-9-]+)$ anekdoty-cat.php?cat=$1 [L]
RewriteRule ^anekdoty/(.*)/page/(.*)$ anekdoty-cat.php?cat=$1&page=$2 [L]
 
RewriteRule ^anekdoty/date/([0-9-.]+)$ anekdoty-date.php?date=$1 [L]
RewriteRule ^anekdoty/date/(.*)/post/(.*)$ anekdoty-date.php?date=$1&page=$2 [L]
 
ErrorDocument 404 http://сайт.ru/error404.php
ErrorDocument 403 http://сайт.ru/error403.php
Пробовал подменить как вы сказали в первом сообщении - результата тоже нет, видимо я где-то до этого напортачил. Буду очень признателен за помощь.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2013, 22:09
Цитата Сообщение от by-bad Посмотреть сообщение
меня перебрасывает на файл с категориями
Именно перебрасывает? Или же при заходе по этой страницы вы видите контент другой страницы?
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
07.10.2013, 22:29  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Именно перебрасывает? Или же при заходе по этой страницы вы видите контент другой страницы?
Да, именно перебрасывает. Такое чувство что из-за правил указанных выше, требуемый путь anekdoty/date/07.10.2013/page/2 подпадает под другое условие.

В другом файле сделана проверка на "входящую переменную".

Есть файл с категориями сайта, туда передаётся $cat. Есть файл с датами, туда передаётся переменная $date. В том состоянии в котором сейчас находится .htaccess данные уходят на страницу anekdoty-cat.php а не на anekdoty-date.php.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2013, 22:31
Флаг L - это закончить преобразование.. У редиректа соответствующий флаг - R. Вы нигде не писали нечто вроде [L,R=301] ? А то, может, написали, а потом или забыли обновить файл, или он закэшировался..?
1
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
07.10.2013, 22:35  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Флаг L - это закончить преобразование.. У редиректа соответствующий флаг - R. Вы нигде не писали нечто вроде [L,R=301] ? А то, может, написали, а потом или забыли обновить файл, или он закэшировался..?
Кэш я уже несколько раз сбрасывал - дело не в нём. Как только удаляю последние строки всё (кроме даты) начинает работать.

В одном из предыдущих сообщения я выкладывал полный файл .htaccess, нечто вроде того о чём вы спрашивали етть вот тут:

PHP
1
2
3
4
5
6
7
8
RewriteCond %{QUERY_STRING} ^utm_source
RewriteRule ^.*$ http://%{HTTP_HOST}/$0? [R=301,L,E=RWR:yes]
 
RewriteCond %{HTTP_HOST} ^www.generatorpozitiva.ru$ [NC]
RewriteRule ^(.*)$ http://generatorpozitiva.ru/$1 [R=301,L]
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://generatorpozitiva.ru/$1 [R=301,L]
Это редирект на главную страницу сайта без index.php и скрытие ссылок из твиттера. Больше ничего такого.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2013, 22:47
попробуйте так..
Code
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
35
36
<files .htaccess>
order allow,deny
deny from all
</files>
 
RewriteEngine on
RewriteCond %{ENV:REDIRECT_RWR} ^yes$
RewriteRule .* - [L]
 
RewriteCond %{QUERY_STRING} ^utm_source
RewriteRule ^.*$ http://%{HTTP_HOST}/$0? [R=301,L,E=RWR:yes]
 
RewriteCond %{HTTP_HOST} ^www\.сайт\.ru$ [NC]
RewriteRule ^(.*)$ http://сайт.ru/$1 [R=301,L]
 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://сайт.ru/$1 [R=301,L]
 
Options +FollowSymlinks
Options -MultiViews
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteRule ^anekdot/(.+)$ anekdoty-post.php?id=$1 [L]
RewriteRule ^anekdoty$ anekdoty.php [L]
 
RewriteRule ^anekdoty/date/([0-9-.]+)$ anekdoty-date.php?date=$1 [L]
RewriteRule ^anekdoty/date/([^/]+?)/post/(.+)$ anekdoty-date.php?date=$1&page=$2 [L]
 
RewriteRule ^anekdoty/([a-z0-9-]+)$ anekdoty-cat.php?cat=$1 [L]
RewriteRule ^anekdoty/page/(.+)$ anekdoty.php?page=$1 [L]
RewriteRule ^anekdoty/([^/]+?)/page/(.+)$ anekdoty-cat.php?cat=$1&page=$2 [L]
 
 
ErrorDocument 404 http://сайт.ru/error404.php
ErrorDocument 403 http://сайт.ru/error403.php
хотя, если честно, даже не могу сообразить, в чем может быть причина
1
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
07.10.2013, 23:47  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
попробуйте так..
хотя, если честно, даже не могу сообразить, в чем может быть причина
Не знаю лучше это уже или нет, но теперь страницу редиректит вот это правило:

PHP
1
ErrorDocument 404 http://спйт.ru/error404.php
Почему-то теперь не "видит" страницу обработчик anekdoty-date.php

Добавлено через 14 минут
KOPOJI, нашёл ошибочку в вашем примере и сразу всё заработало, просто вы указали в строке:

PHP
1
RewriteRule ^anekdoty/date/([^/]+?)/[B]post[/B]/(.+)$ anekdoty-date.php?date=$1&page=$2 [L]
post вместо page - заменил, вроде заработало! Сейчас всё остальное проверю и отпишусь.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.10.2013, 23:51
Цитата Сообщение от by-bad Посмотреть сообщение
вы указали в строке
я копипастил, это у вас ошибка была значит
1
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
08.10.2013, 00:13  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
я копипастил, это у вас ошибка была значит
Блин, неужели это я так "лоханулся"?! пол дня с ним воюю!

Тем не менее, благодаря вашему варианту перестало перебрасывать на другую страницу! Сейчас проверю остальные разделы и отпишусь, тем не менее, я уже бесконечно благодарен за Вашу помощь.

Добавлено через 15 минут
KOPOJI, всё прекрасно работает, огромное вам человеческое спасибо за помощь. Сам бы я наверное ещё неделю провозился со своим методом научного "тыка" и не известно получилось бы что-то или нет.
0
08.10.2013, 08:30

Не по теме:

Самое увлекательное, что се было решено в посте #2:)

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.10.2013, 09:29
TAB, вообще-то, нет. К примеру, здесь
Цитата Сообщение от by-bad Посмотреть сообщение
Code
26
27
28
29
RewriteRule ^anekdoty/page/(.*)$ anekdoty.php?page=$1 [L]
 
RewriteRule ^anekdoty/([a-z0-9-]+)$ anekdoty-cat.php?cat=$1 [L]
RewriteRule ^anekdoty/(.*)/page/(.*)$ anekdoty-cat.php?cat=$1&page=$2 [L]
до третьего правила может никогда и не дойти, потому что в первом указано "любой символ любое количество раз"..
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
08.10.2013, 12:14
В общем моё скромное виденье:
Code
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
<files .htaccess>
order allow,deny
deny from all
</files>
 
Options -MultiViews +FollowSymLnks
 
ErrorDocument 404 /error404.php
ErrorDocument 403 /error403.php
 
RewriteEngine on
 
RewriteBase /
 
RewriteCond %{HTTP_HOST} ^www\.сайт\.ru$ [NC]
RewriteRule .* %{REQUEST_SCHEME}://сайт.ru/$0 [R=301,L]
 
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule .* - [L]
 
RewriteRule ^anekdot/(\d+)$ anekdoty-post.php?id=$1 [NC,L]
 
RewriteRule ^anekdoty$ anekdoty.php [NC,L]
RewriteRule ^anekdoty/page/(\d+)$ anekdoty.php?page=$1 [NC,L]
 
RewriteRule ^anekdoty/([a-z\d-]*)$ anekdoty-cat.php?cat=$1 [NC,L]
RewriteRule ^anekdoty/([a-z\d-]*)/page/(\d+)$ anekdoty-cat.php?cat=$1&page=$2 [NC,L]
 
RewriteRule ^anekdoty/date/([\d.]{6,})$ anekdoty-date.php?date=$1 [NC,L]
RewriteRule ^anekdoty/date/([\d.]{6,})/page/(\d+)$ anekdoty-date.php?date=$1&page=$2 [NC]
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
09.10.2013, 00:50  [ТС]
Цитата Сообщение от TAB Посмотреть сообщение

Не по теме:

Самое увлекательное, что се было решено в посте #2:)

TAB, я пробовал ваш вариант и у меня он не сработал! Я уже отписывался, что вероятнее всего это происходит из-за других правил, а в "одиночку" может быть оно и рабочее.

Цитата Сообщение от TAB Посмотреть сообщение
В общем моё скромное виденье:
Проблема уже решена - способ который предложил KOPOJI работает на ура. Тем не менее, огромное спасибо за помощь и проявленный интерес. Снимаю шляпу перед вами господа

Добавлено через 11 часов 38 минут
KOPOJI, а косячёк я всё-таки какой-то нашёл. Дело в том что теперь у меня перестали отображаться некоторые изображения, содержащие в названии слово anekdoty. Например есть логотип anekdoty-new и оно ни в какую, не хочет отображаться на странице, а при прямом переходе по адресу http://сайт.ru/design/anekdoty-new.png у меня появляется ошибка 404.

Есть "таблэтка" на этот случай?
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
09.10.2013, 07:44
При обращении к файлам, символическим ссылкам и директориям ничего не переписывать.
Code
1
2
3
4
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
Расположить где-то вначале после RewriteEngine, как в примере выше.
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
21.10.2013, 22:19  [ТС]
Товарищи, теперь у меня появилась необходимость в преобразовании поискового запроса в более приятный вид.
На данный момент результат поиска на сайте отображается таким образом:

anekdoty-search.php?search=%EC%F3%E6+%E8+%E6%E5%ED%E0

И вот так если страниц с результатами несколько:

anekdoty-search.php?search=%EC%F3%E6%20%E8%20%E6%E5%ED%E0&page=5

В конце добавился так называемый "пейджер".

В идеале, хотелось бы что бы он выглядел так же как выглядят остальные мои страница с постраничной навигацией, т.е.:

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

PS: Поисковой запрос передаю через GET форму

HTML5
1
2
3
<form id="searchform" name="searchform" method="get" action="anekdoty-search.php?search=$_GET['search']">
<input name="search" placeholder="Поиск по анекдотам" type="text" />
</form>
0
 Аватар для TAB
215 / 215 / 73
Регистрация: 12.03.2013
Сообщений: 485
21.10.2013, 22:35
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]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.10.2013, 22:35
Помогаю со студенческими работами здесь

Настройка 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 сделать ЧПУ?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Камера 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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru