Форум программистов, компьютерный форум, киберфорум
Наши страницы
Apache, htaccess
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
F(r)an!k
18 / 31 / 4
Регистрация: 12.03.2010
Сообщений: 185
1

RewriteRule

22.08.2010, 16:13. Просмотров 2804. Ответов 10
Метки нет (Все метки)

Всем доброго дня!
Покажите как на практике можно
заенить URL

http://www.site.ru/index.php?cityId=1
http://www.site.ru/index.php?cityId=2
http://www.site.ru/index.php?cityId=3

на

http://www.site.ru/Париж
http://www.site.ru/Мадрид
http://www.site.ru/Барселона

иными словами скрыть от прольсователя структуру GET.
Если не сложно, опишите по-подробнее и вылоите .htaccess
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2010, 16:13
Ответы с готовыми решениями:

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

RewriteRule
Здравствуйте. Есть файл .htaccess: RewriteEngine On RewriteRule ^year/(+)/?$...

RewriteRule
Люди помогите сделать в htaccess код Мне нужно чтобы из такого урл ...

о RewriteRule
пытаюсь на своем сайте сделать ЧПУ , все страницы меняются 1й переменной либо page(отвечает за...

RewriteRule
Помогите написать RewriteRule для поиска. search.php <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML...

10
Vovan-VE
13169 / 6555 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
22.08.2010, 16:34 2
Код
RewriteEngine On
RewriteBase /

RewriteRule ^foobar.php($|\?) - [L]
RewriteRule ^([^/]+)($|\?) foobar.php?$1 [L,NS]
Будет в $_SERVER в нескольких местах в разных видах.
PHP
1
print_r($_SERVER);
Добавлено через 4 минуты
Или обычное
Код
RewriteRule ^([^/]+)($|\?) foobar.php?q=$1 [L,NS]
PHP
1
$_GET['q']
0
F(r)an!k
18 / 31 / 4
Регистрация: 12.03.2010
Сообщений: 185
22.08.2010, 16:40  [ТС] 3
вот я это уже читал в нескольких статьях,
но не догоняю по-прежнему... (((
не получается... скиньте работающий пример!
А я Вам помогу, чем смогу!))
0
Vovan-VE
13169 / 6555 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
22.08.2010, 16:45 4
F(r)an!k, А в чем сложности? В кодировках, разве что. Один браузер отправить "Превед" в Win-1251 (и получится %CF%F0%E5%E2%E5%E4 ), а другие браузеры в UTF-8 отправят (и получится %D0%9F%D1%80%D0%B5%D0%B2%D0%B5%D0%B4).
В скрипте сначала надо определить кодировку этого дела, а затем уже делать в ним, что нужно.
0
22.08.2010, 16:45
F(r)an!k
18 / 31 / 4
Регистрация: 12.03.2010
Сообщений: 185
22.08.2010, 17:03  [ТС] 5
Сложности вот в чем:
да, у меня в $_GET['cityId'] храниться
порядковый номер города в таблице.
вот этот кусок понятен - foobar.php?q=$1
а вот этот нет - ^([^/]+)($|\?) - как мне сюда засылать имя города???
и что значит [L,NS] - растолкуйте пожалуйста!
0
Vovan-VE
13169 / 6555 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
22.08.2010, 17:33 6
Код
RewriteRule ^([^/]+)($|\?) foobar.php?q=$1 [L,NS]
RewriteRule Шаблон Замена [Флаги]
Шаблон ^([^/]+)($|\?) - означает "В начале содержит ( любые символы, кроме / ) , и далее либо строка заканчивается, либо символ ? ." Круглые скобки означают "запомнить это в карман".
Т.е. адреса вида
http://site.ru/foo
http://site.ru/Bar
http://site.ru/qwe?...
В замене foobar.php?q=$1 на место $1 подставляется содержимое первого кармана. Из тех примеров выше получится, соответственно:
http://site.ru/foobar.php?q=foo
http://site.ru/foobar.php?q=Bar
http://site.ru/foobar.php?q=qwe
Флаг L означает "завершить анализ на этом RewriteRule, игнорировать нижележащие."
Флаг NS означает, что правило не действует для внутренних запросов. См. ниже.

Как это работает.

Пользователь набирает в браузере адрес http://site.ru/Абв
Apache принимает Внешний запрос /Абв , анализирует все RewriteRule.
Срабатывает второй RewriteRule - получается адрес /foobar.php?q=Абв
Выполняется Внутренний запрос /foobar.php?q=Абв
Срабатывает первый RewriteRule - ничего не изменяется
Запускается PHP foobar.php , получает инфу частично о Внешнем и о Внутреннем запросах.

Пользователя в браузере видит адрес, который набрал: http://site.ru/Абв
Скрипт запущен так, будто пользователь набрал http://site.ru/foobar.php?q=Абв
0
Alorian
691 / 531 / 40
Регистрация: 22.06.2009
Сообщений: 1,293
23.08.2010, 07:20 7
Вот тут похожая тема обсуждалась:
Русские буквы в .htaccess
1
F(r)an!k
18 / 31 / 4
Регистрация: 12.03.2010
Сообщений: 185
23.08.2010, 23:01  [ТС] 8
тогда почему это не работает???

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
switch($_GET['r']){
    case '1': {
        print('Один');
        break;
    }
    case '2': {
        print('Два');
        break;
    }
    case '3': {
        print('Три');
        break;
    }
}
 
?>
 
 
<a href="http://biano/1">1</a> 
<a href="http://biano/2">2</a> 
<a href="http://biano/3">3</a>

RewriteEngine on

RewriteRule ^([^/]+)($|\?) test.php?r=$1
0
Vovan-VE
13169 / 6555 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
24.08.2010, 16:09 9
Цитата Сообщение от F(r)an!k Посмотреть сообщение
тогда почему это не работает???
Потому что с кодировками проблемы. Сделайте
PHP
1
2
print_r($_SERVER);
print_r($_GET);
и увИдите, что где в каком виде находится.
1
F(r)an!k
18 / 31 / 4
Регистрация: 12.03.2010
Сообщений: 185
24.08.2010, 23:31  [ТС] 10
Vovan-VE, а можешь скинуть реально работающий пример в архиве? Просто для меня главное начальный толчек, дальше я сам раскачегарю!) Кстати еще раз спасибо за JSON))
0
Vovan-VE
13169 / 6555 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
25.08.2010, 12:33 11
F(r)an!k,
.htaccess
Код
RewriteEngine on
RewriteBase /

# если запросили не папку и не файл, то
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ /script.php?$1 [NS]
script.php
PHP
1
2
3
4
5
<?php
header('Content-Type: text/plain; charset=utf-8');
print_r($_SERVER);
print_r($_GET);
?>
Запрашиваю http://test.local/Превед
Вижу в ответ:
Код
Array
(
    ...
    [REDIRECT_QUERY_STRING] => Превед
    [REDIRECT_URL] => /Превед
    [QUERY_STRING] => Превед
    [REQUEST_URI] => /%D0%9F%D1%80%D0%B5%D0%B2%D0%B5%D0%B4
    ...
)
Array
(
    [Превед] => 
)
Если $_SERVER['REQUEST_URI'] пропустить через функцию urldecode(), то получится правильный текст в UTF-8 (его мы и видим в $_SERVER['REDIRECT_URL']).
1
25.08.2010, 12:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2010, 12:33

RewriteRule
AddDefaultCharset utf-8 RewriteEngine on RewriteRule ^(.+)/ $1\.php RewriteRule ^(.+) $1\.php...

RewriteRule
Никак не могу разобрать как это работает. Сколько примеров не смотрел ничего не получается....

RewriteRule
Прошу помощи. Не знаю как сделать так что бы работала вот эта строка со знаком вопроса. ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru