2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|||||||||||
1 | |||||||||||
Как создать два RewriteRule?17.08.2018, 21:56. Показов 2067. Ответов 14
Есть htaccess, маршрутизация (роутинг)
Нужно сделать точно такую же, только для страницы contact.php. Я создаю так:
Но почему-то второй не срабатывает, а действия повторяются как у первого. То есть, после перехода на страницу contact/id/10 открывается index/id/10. Как объединить эти два варианта?
0
|
17.08.2018, 21:56 | |
Ответы с готовыми решениями:
14
RewriteCond влияет толко для один, следушчи RewriteRule. можно как-то превишать количество RewriteRule неполучается создать правило RewriteRule Не пойму как работает RewriteCond и RewriteRule RewriteRule - Как исправить ошибку, якобы вызова папки? |
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
|
|
18.08.2018, 00:13 | 2 |
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|
18.08.2018, 10:16 [ТС] | 3 |
Jewbacabra, можно конкретный пример привести?
Добавлено через 30 минут Jewbacabra, я долго разбирался, в конечном итоге не получилось. Можно привести пример, как будет выглядеть два rewrite?
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 11:43 | 4 |
NormalThread, регулярные выражения в правилах-то должны отличать или нужны какие-то условия, вносящие различие. Из двух по сути одинаковых правил, конечно, будет работать первое. Это настолько просто, что тут нечего понимать. Лучше объясните, зачем вам вообще понадобились две точки входа.
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|
18.08.2018, 11:47 [ТС] | 5 |
Phantom-84, чтобы можно было открыть открыть как "example.com/index/id/10", так и "example.com/contact/id/10"
Можно было использовать стандартный GET запрос, но выглядит намного лучше такой прием роутинга. Я в apache, в частности htaccess ноль, поэтому и обратился сюда. Читал документации, там есть способы реализации, но только в единичном случае, а мне нужно два запроса на разных страницах, а нигде такого нет
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 12:07 | 6 |
Вторая точка входа вам для этого не нужна. Вы можете все делать в одной. В частности подключать нужный код в зависимости от адреса, типа запроса и т.п. Я бы даже вот это убрал:
?id=$1 , потому что получить путь программным путем не составляет никакого труда. Причем он будет получен в исходном виде, без тех преобразований, которые претерпевают значения массива $_GET.Добавлено через 5 минут Но если вы склоняетесь к старой школе, используйте разные регулярные выражения в правилах, как я выше написал, например: ^index/ ^contact/ Добавлено через 2 минуты Можно объединить: ^(index|contact)/ - в этом случае имя будет первым параметром для подстановки.
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
||||||
18.08.2018, 12:07 [ТС] | 7 | |||||
Phantom-84, то есть вот так?
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 12:11 | 8 |
К предыдущему сообщению. А ко всему пути (без ведущего слеша) вы можете обращаться при помощи $0, например.
Добавлено через 1 минуту Не совсем. Изучите основы. Также будет полезна ссылка, оставленная Jewbacabra.
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|
18.08.2018, 12:23 [ТС] | 9 |
Phantom-84, можно примерно составить? Я знаю, что это не сложно, но я не втыкаю
Добавлено через 11 минут Jewbacabra, я знаю, что это не сложно, но я лично ноль в Apache, есть минута свободная?
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 12:25 | 10 |
Я на форуме никому ничего не составляю. Тем более что мне достаточно неприятно смотреть на подобные конструкции в .htaccess. У вас откровенная ошибка с $2. Да и вообще с параметрами, т.к. для них не заданы прототипы. Без прототипа можно использовать только $0.
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
||||||
18.08.2018, 12:30 [ТС] | 11 | |||||
Phantom-84, хорошо, допустим:
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 12:35 | 12 |
Так уже лучше. Я надеюсь, после написанного мной вы уже понимаете, что в id попадет не 10, а весь путь (без ведущего слеша).
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|
18.08.2018, 13:00 [ТС] | 13 |
Phantom-84, да, я отделяю это функцией explode()
Вопрос заключается не в этом, а в том, правильная ли реализация двойного роутинга? Еще не по теме, но по какой-то причине ajax запросы не отправляются, причина неизвестна, нигде про это не написано конкретно Добавлено через 14 минут Phantom-84, и еще при попытке вывести $_GET['id'] он выводит просто то, что находится в диапазоне от "RewriteRule ^" до "/ ", то есть, при попытке зайти на "example.com/index/id/10" он выводит "index/" и при "example.com/contact/id/10" выводит "contact/"
0
|
350 / 294 / 71
Регистрация: 15.09.2017
Сообщений: 1,305
|
|
18.08.2018, 13:14 | 14 |
Сообщение было отмечено NormalThread как решение
Решение
Нет, не правильная. Вы частично выполняете одну и ту же работу дважды. Сначала в .htaccess, потом в выбранной точке. Передавайте в id хотя бы "id/10", если, конечно, ваши обработчики не настолько универсальны, что могут спокойно использоваться и в других ветвях сайта. Последнее впрочем не оправдывает двойную работу, а вновь говорит о неправильном разделении роутинга.
Таких причин нет, если используется клиент, способный это делать. Добавлено через 8 минут Значит, я не совсем правильно понял написанное в документации: .* или .*$ , хотя "незакрытое" выражение по идее это и должно обозначать.
0
|
2 / 2 / 1
Регистрация: 12.08.2017
Сообщений: 110
|
|
18.08.2018, 13:30 [ТС] | 15 |
Phantom-84, да, все работает, сейчас посмотрю как будет в два варианта
Добавлено через 11 минут Phantom-84, отлично, все работает как надо! Очень помогло! Благодарю! Однако остается вопрос с ajax и почему он не передает данные php именно с той страницы, где были изменения RewriteRule, но это в другой теме
0
|
18.08.2018, 13:30 | |
18.08.2018, 13:30 | |
Помогаю со студенческими работами здесь
15
Как создать два потока Как создать сеть из 1с на два компа??? Как создать два потока в TCP Как создать два условия для Button Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |