Форум программистов, компьютерный форум, киберфорум
Apache, htaccess
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
1

RewriteRule передаёт только последнее значение

06.12.2012, 19:08. Показов 1399. Ответов 9

Author24 — интернет-сервис помощи студентам
Добрый день. Вот RewriteRule:
Код
RewriteRule ^(.*)\/(.*)\/(.*)$ pages\/$1?s1=$2&s2=$3 [QSA,L]
И работает он так:
- если я обращаюсь так: site.com/section/auto/, то оно включает страницу section.php из папки pages и в s1 передаёт auto.
- если же обращаюсь так: site.com/section/auto/name/, то оно всё равно включает страницу section.php, но при этом s1 = name, а $1 = section/auto/, при этом для меня остаётся загадкой, как при section/auto/ оно берёт страницу именно section.php.
Как быть?

Добавлено через 3 минуты
Разве что делать так:
Код
RewriteRule ^section\/(.*)\/(.*)/$ pages\/section.php?s1=$1&s2=$2 [QSA,L]
Но это не удобно в том плане, что такое надо сделать для каждой страницы в отдельности.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2012, 19:08
Ответы с готовыми решениями:

Добавляет только последнее значение
есть скрипт <?php // SEOMoz Access / Secret define('SEOMOZ_ACCESS_ID','mozscape-423d5002dc');...

Считает только последнее значение
Здравствуйте! Хочу сделать расчет без циклов( и так их слишком много в коде), сделал вот так, но...

Цикл for выводит только последнее значение
Только начал учит C# и Visual Studio. Пишу программу в Visual Studio на С#, которая должна при...

В файл записывается только последнее значение
Есть программка которая записывает результат в файл. Что нужно изменить чтобы в файле оставались...

9
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
06.12.2012, 19:22 2
Вы запросили site.com/section/auto/name/
Правило: RewriteRule ^(.*)/(.*)/(.*)$

.* старается съесть как можно больше. Сначала первая .* жрет всю строку section/auto/name/ .
Затем, чтобы дальше стало "/", ей приходится откатываться назад: $1 = "section/auto/name" и далее / . Затем синяя .* совпадает с пустотой.
Но далее снова должно быть /, поэтому снова откат: section/auto , / , name , / и последняя пустая. Совпадение удалось.

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

Используйте [^/] вместо точки.
Между слешами правда может быть и пустота? Нет - используйте + вместо * .
Код
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ pages/$1?s1=$2&s2=$3 [QSA,L]
1
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
06.12.2012, 23:58  [ТС] 3
Теперь 404. Не подходит.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.12.2012, 10:32 4
подразумеваю, что там должна быть все же такая регулярка
Код
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ pages/$1.php?s1=$2&s2=$3 [QSA,L]
0
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
07.12.2012, 17:32  [ТС] 5
Да, теперь при обращении по адресу
Код
http://127.0.0.1/rabota/adv/section/auto/firma/
Всё работает, но достаточно написать так
Код
http://127.0.0.1/rabota/adv/section/auto/
Или так
Код
http://127.0.0.1/rabota/adv/section/
Выдаёт 404.
0
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
09.12.2012, 12:45  [ТС] 6
Ап ап
0
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
10.12.2012, 15:51 7
Цитата Сообщение от KOPOJI Посмотреть сообщение
Код
RewriteRule ... pages/$1.php?s1=$2&s2=$3 [QSA,L]
/pages/...
Код
RewriteRule ... /pages/$1.php?s1=$2&s2=$3 [QSA,L]
0
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
10.12.2012, 19:26  [ТС] 8
Так /pages/ это аналогично 127.0.0.1/pages/, а мне надо 127.0.0.1/rabota/adv/pages/
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.12.2012, 19:58 9
eisenheim, Значит так и пишите
Код
RewriteRule ... /rabota/adv/pages/$1.php?s1=$2&s2=$3 [QSA,L]
если не поможет - попробуйте без первого слэша
0
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
16.12.2012, 00:31  [ТС] 10
Всё равно получаю 404, когда делаю на одну подкатегорию меньше:
Код
http://127.0.0.1/rabota/adv/section/auto/
А с
Код
http://127.0.0.1/rabota/adv/section/auto/2/
Всё нормально передаёт.
0
16.12.2012, 00:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2012, 00:31
Помогаю со студенческими работами здесь

Цикл for. Вывести в консоль только последнее значение
Как вывести в консоль только последний ответ? Например, при Число: 3 и Степень: 3. Чтобы в...

Из двух столбцов в файл записывается только последнее значение
Здравствуйте! Я написал программу, которая считает значение функции. Результат выводиться в виде...

Почему не работает цикл (выводится только последнее значение)?
Почему выводит последнее значение а не массив? $data_arr = array(); $result =...

$_POST не передает символы, только числа
<?php $mysqli = new mysqli("mysql.hostinger.com.ua", "u509951523_testp", "pass",...

QtSerialPort передает только первый байт?
Пишу на qt4.8, собрал под него библиотеку QtSerialPort, пишу такой код QByteArray message; ...

RewriteCond влияет толко для один, следушчи RewriteRule. можно как-то превишать количество RewriteRule
здраствуите, вот что интересно, сделаю mod_rewrite и для етого в .htaccess фаиле пишу ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru