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

Чпу, mod_rewrite и .htaccess

07.10.2013, 18:34. Показов 6918. Ответов 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
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.12.2013, 00:05
Студворк — интернет-сервис помощи студентам

Блин. Вот смотрите, беру ваш конфиг.
Изменяю только последнюю строчку (просто прописываю свой путь к обработчику ошибок)
Code
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 /test/f/error.php
Создаю три файла.
index.php (по сути, он и не нужен, просто для "чтоб было")
PHP
1
index.php
interesnye-fakty-search.php
PHP
1
2
interesnye-fakty
<?php var_dump($_GET);
error.php
Code
1
ERROR
Результат переходов по разным адресам

Я не знаю, как еще объяснить, что надо ввести "левый" путь к файлу для проверки
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
03.12.2013, 00:21  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Я не знаю, как еще объяснить, что надо ввести "левый" путь к файлу для проверки
Пожалуйста, не ругайтесь Знаю что порядком вам уже надоел, да мне и самому уже стыдно. Но по сути, Ваш 4ый скриншот - это и есть моя проблема! Путь там прописан верный, а вот результат уже нет! У Вас же там написано что переменная "факты" foo/page/2f но по сути она должна быть просто foo + отдельно page - как на 3ем скриншоте. Вот у меня на данный момент такая же ошибка!

Добавлено через 7 минут
Стоп, всё - кажется понял. Вы всё это к тому что нужно сделать что бы файлы отличались по названию?
Но у меня вроде же включена опция -MultiViews, это не должно было бы решить проблему ?
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
03.12.2013, 00:52  [ТС]
Попробовал сделать как у вас (изменил на "левый" адрес) - страница с ошибкой все ровно не появилась!

Кликните здесь для просмотра всего текста


Попробовал изменить имена файлов и переписал правила в htacces - результат тот же.

Это может быть из-за того что вы в запросе используете латинские символы, а у меня закодированные?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.12.2013, 09:39
by-bad, просто в некоторых случаях апач считает, что file.php == file и поэтому
Code
1
2
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
не срабатывают (срабатывает RewriteCond %{REQUEST_FILENAME} -f), а значит, нижеследующие директивы игнорируются. Честно, даже не знаю, чем можно помочь - у меня в случае "левого" имени файла все работает..
Может, кто по умнее поможет, я не большой спец по настройке апача и mod_rewrite
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
03.12.2013, 11:37  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
в некоторых случаях апач считает, что file.php == file и поэтому
Не знаю насколько правильно я сделал, но я попытался изменить имя файла. Сделал имя обработчика search-interesnye-fakty.php что в принципе значительно отличается от предыдущего варианта. Прописал "левое" название, но почему-то не помогло.
Цитата Сообщение от KOPOJI Посмотреть сообщение
Может, кто по умнее поможет, я не большой спец по настройке апача и mod_rewrite
Эх, значит таки "бросаете" меня - жаль За всё это время в тему зашло всего несколько человек, сомневаюсь что появится кто-то умнее.

TAB, заглядывает время от времени, но даже не отвечает. В общем печально.

Добавлено через 11 минут
А можно как-то указать что бы переменная "факты" считалась до первого слеша? т.е. переменная должна находиться между знаком "равно" и знаком "слеша" который идёт перед page?

MySQL
1
2
RewriteCond %{QUERY_STRING} ^fakty=([^/]+?)/page/(\d+?)$ [NC]
RewriteRule . search-interesnye-fakty.php?fakty=%1&page=%2 [L]
0
03.12.2013, 21:41

Не по теме:

Цитата Сообщение от by-bad Посмотреть сообщение
Эх, значит таки "бросаете" меня
"Бросаю" - это когда знаешь, чем помочь, но не хочешь. Я не знаю, чем помочь - у меня работает. Что-либо говорить более не имеет смысла - толкового ничего я больше не скажу

0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
03.12.2013, 22:45  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Я не знаю, чем помочь - у меня работает.

Не по теме:

KOPOJI, возможно вы меня не правильно поняли, ведь не зря же я слово бросаете взял в кавычки - это переносное значение.



Вы уделили мне и так уйму своего времени, но если Вас не затруднит, помогите ещё чуть чуть.

По теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
Кажется, я понял, в чем проблема by-bad, а если в строке вбивать не interesnye-fakty?search=.... а, к примеру, вот так:
interesnye-fakt?search=... (без одной буквы, ну или изменить на любое другое название, отличное от имени файла)
Попробуйте, и отпишитесь о результатах
Не знаю почему не работало раньше, но сейчас у меня даже после удаления "букв" или их замены поиск всеровно срабатывает. Т.е. я вместо стандартного запроса могу написать /sdkfgskdf/?fakty=good/page/2 а у меня все ровно результаты выдаются в обычном режиме - вероятно это вы и хотели услышать в прошлый раз. Не знаю, может закэшировалось что-то...

В чём подвох?

Добавлено через 13 минут
Получается так, в htacces написано правило

MySQL
1
2
3
RewriteRule ^search/fakty/$ interesnye-fakty-search.php [L]
RewriteCond %{QUERY_STRING} ^fakty=([^/]+?)/page/([0-9]+)$ [NC]
RewriteRule . interesnye-fakty-search.php?fakty=%1&page=%2 [L]
Если я захожу по адресу /search/fakty/?fakty=good/page/2 и добавляю что-нибудь - всё "ломается", а если я меняю хоть одну букву из начала строки /search/fakty/ всё работает как надо - срабатывают проверки на цифры и всё остальное.

Как это исправить?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.12.2013, 23:04
переименовать файл, чтобы правило в регулярке не являлось реальным файлом (по-видимому, не только "расширение" не учитывается). Я не знаю, баг это или фича апача
Как вариант, перекинуть все файлы в другую директорию, чтобы запрос "interesnye-fakty..." никак не мог совпасть ни с каким именем из этой директории
0
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 117
03.12.2013, 23:56  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
переименовать файл, чтобы правило в регулярке не являлось реальным файлом (по-видимому, не только "расширение" не учитывается). Я не знаю, баг это или фича апача
Как вариант, перекинуть все файлы в другую директорию, чтобы запрос "interesnye-fakty..." никак не мог совпасть ни с каким именем из этой директории
Ок, сейчас попробую.

Добавлено через 50 минут
Переименовал все файлы:

interesting-facts.php
interesting-facts-post.php
interesting-facts-ne-najdeny.php
interesting-facts-otpravit-kommentarij.php
interesting-facts-date.php
interesting-facts-tags.php

В .htaccess:

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
RewriteRule ^interesnye-fakty$ interesting-facts.php [L]
RewriteRule ^interesnye-fakty/([0-9]+)$ interesting-facts-post.php?id=$1 [L]
RewriteRule ^interesnye-fakty-ne-najdeny$ interesting-facts-ne-najdeny.php [L]
RewriteRule ^interesnye-fakty/page/([0-9]+)$ interesting-facts.php?page=$1 [L]
RewriteRule ^interesnye-fakty-otpravit-kommentarij$ interesting-facts-otpravit-kommentarij.php [L]
RewriteRule ^interesnye-fakty/date/([0-9-.]+)$ interesting-facts-date.php?date=$1 [L]
RewriteRule ^interesnye-fakty/date/([^/]+?)/page/([0-9]+)$ interesting-facts-date.php?date=$1&page=$2 [L]
RewriteRule ^interesnye-fakty/tag/([0-9a-z-]+)$ interesting-facts-tags.php?tag=$1 [L]
RewriteRule ^interesnye-fakty/tag/(.*)/page/([0-9]+)$ interesting-facts-tags.php?tag=$1&page=$2 [L]
 
RewriteRule ^search/fakty/$ interesting-facts-search.php [L]
RewriteCond %{QUERY_STRING} ^fakty=([^/]+?)/page/([0-9]+)$ [NC]
RewriteRule . interesting-facts-search.php?fakty=%1&page=%2 [L]
Поисковая форма:

HTML5
1
2
3
<form id="searchform" name="searchform" method="get" action="search/fakty/">
<input name="fakty" placeholder="Поиск" type="text" />
</form>
Ввожу запрос "good" + нажимаю Enter. Попадаю на страницу .../search/fakty/?fakty=good
Вручную пытаюсь изменить URL. добавляю пару букв внутри слова search, получается .../sear123sdch/fakty/?fakty=good нажимаю Enter - появляется ошибка 404. Всё правильно!
Пробую удалить пару букв из слова search и нажимаю Enter - появляется ошибка 404. Всё правильно!
Возвращаюсь к началу и перехожу на вторую страницу с результатами поиска. Страница /search/fakty/?fakty=good/page/2 - открылась правильная страница (продолжение). Всё правильно!

Добавляю несколько букв внутри слова search, получается .../sear123sdch/fakty/?fakty=good/page/2 нажимаю Enter - ошибка не появилась, результаты поиска сохранились, номер страницы (2) тоже сохранился. Не сработало!
Добавляю слеш и несколько букв в конце строки, получается .../search/fakty/?fakty=good/hgfjdj нажимаю Enter - ошибка не появилась, результаты поиска сохранились, _GET переменная "факты" содержит good/hgfjdj, вместо просто good. Не сработало!
Удалил всунутые буквы. Попутно удалил ещё парочку букв, получилось это: .../sety/?fakty=good/page/2 нажимаю Enter - ошибка не появилась, результаты поиска сохранились, номер страницы (2) тоже сохранился. Не сработало!
Открыл страницу поиска, перешёл на 2 страницу с результатами, дописал к номеру страницы беспорядочные буквы, получилось ../search/fakty/?fakty=good/page/2dfgfjh. Открылась первая страница с результатами по запросу good/page/2dfgfjh а не good, который вписывался изначально. Вся конструкция рушится, переход на вторую страницу с результатами "создаёт" ссылку вида /search/fakty/?fakty=good/page/2dfgfjh/page/2. Не сработало!

Блин, я в шоке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2013, 23:56
Помогаю со студенческими работами здесь

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


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

Или воспользуйтесь поиском по форуму:
69
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru