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

Чпу, mod_rewrite и .htaccess

07.10.2013, 18:34. Показов 7148. Ответов 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
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru