Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: BigFlint
Дата сообщения: 28.10.2008 11:04
С mod_rewrite все понятно.
А как сделать чтобы в url была кирилица.
Например: http://site.ru/тест.
Браузеры в разных кодировках передают url серверу, так например FireFox 2.0 в windows-1251, Opera 9 с операционной системой Ubuntu вообще не пойму в какой кодировке.

Mod_rewrite при обращении к хосту переадресовывает на файл load.php

<?
$url = urldecode($_SERVER['REQUEST_URI']);
...
?>

Как узнать в какой кодировке переменная $url?
Может кто знает где взять готовое решение кирилицы в url?
Автор: Neuromancer
Дата сообщения: 31.10.2008 11:12
Гуру mod_rewrite'а, подскажите, пожалуйста, как сделать следующее:
Дан адрес: site.ru/p1/p2/p3/p4/
На выходе нужно получить site.ru/index.php?par1=p1&par2=p2&par3=p3&par4=p4
Вот такая конструкция работает:

Код:
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?razdel=$1&type=$2&action=$3&id=$4 [L]
Автор: PEDKA
Дата сообщения: 31.10.2008 13:23
Neuromancer
Всё просто.
Делаешь так:

Код: RewriteRule ^(.*)$ index.php/?param=$1 [L]
Автор: Neuromancer
Дата сообщения: 31.10.2008 14:11

Цитата:
Neuromancer
Всё просто.
Делаешь так:

Код:
RewriteRule ^(.*)$ index.php/?param=$1 [L]


А в самом начале скрипта просто разделяешь переменную param на массив, разделитель «/»
Например, в PHP:

Код:
$query_string=explode('/',$param);

Спасибо, учту. А вариант полностью на .htaccess, как я описал возможен вообще?
Хотя, твой, конечно, гораздо красивее и более гибкий.
Автор: ZemoN
Дата сообщения: 14.11.2008 01:56
Вечер добрый всем!
Подскажите , а лучше покажите готовый пример передачи запроса php скрипту, который и выполняет проверку при посещении любой страницы статичного сайта.
просто хочу делать проверку по geoip.
Автор: Cheery
Дата сообщения: 14.11.2008 06:23
ZemoN
ну, например, обращение к html файлу передается скрипту и в качестве параметра - имя файла
RewriteRule ^(.*)\.html$ script.php?file=$1

скрипт script.php проверяет ip и далее, к примеру, если все ок, то
readfile($_GET['file']);
что не совсем правильно, так как надо проверить и исправить путь/имя к файло, а то так смогут прочитать любой доступный файл в системе, но как пример - пойдет.
Автор: ZemoN
Дата сообщения: 14.11.2008 21:03
а вот в
Цитата:
RewriteRule ^(.*)\.html$ script.php?file=$1
можно как нить вместо
Цитата:
.*
указать список файлов по которым будит работать
Цитата:
script.php?file=$1
?
и где должно быть
Цитата:
readfile($_GET['file']
?



Автор: Cheery
Дата сообщения: 14.11.2008 21:35
ZemoN

Цитата:
указать список файлов по которым будит работать

можно.. а не проще указать тип?


Цитата:
и где должно быть

в php коде

ps: лучше наймите кого то, чтобы все сделали. одно дело, если бы схватывали на лету, а объяснять такие мелочи - мало желания
Автор: ZemoN
Дата сообщения: 14.11.2008 22:03

Цитата:
ps: лучше наймите кого то, чтобы все сделали. одно дело, если бы схватывали на лету, а объяснять такие мелочи - мало желания
схватываю я нормально

я предполагаю выглядить должно так:
htaccess:

Код:
RewriteEngine on
RewriteRule ^(.*)\.html$ script.php?file=$1
Автор: Cheery
Дата сообщения: 14.11.2008 22:48

Цитата:
просто не понял что значит

ну я, к примеру, могу вызвать напрямик script.php?file=какой_нить_файл.php и получить его код. это как пример.
Автор: ZemoN
Дата сообщения: 14.11.2008 23:08

Цитата:
ну я, к примеру, могу вызвать напрямик script.php?file=какой_нить_файл.php и получить его код. это как пример.

опачки... а тут можно сделать только любой html ?

а в целом все правильно?
Автор: Cheery
Дата сообщения: 15.11.2008 01:59
ZemoN

Цитата:
а тут можно сделать только любой html ?

чего?


Цитата:
а в целом все правильно?

за исключением ошибок синтаксиса и смысловых. например в readfile не указано расширение файла, а оно передаваться не будет.. ну создайте директорию на сервере и поэкспериментируйте
Автор: ZemoN
Дата сообщения: 15.11.2008 15:51
создал вот что:
.htaccess-
Код: RewriteEngine on
RewriteRule ^.*\.html /script.php

redirect /_vti_bin http://www.microsoft.com
redirect /scripts http://www.microsoft.com
redirect /MSADC http://www.microsoft.com
redirect /c http://www.microsoft.com
redirect /d http://www.microsoft.com
redirect /_mem_bin http://www.microsoft.com
redirect /msadc http://www.microsoft.com
RedirectMatch (.*)\cmd.exe$ http://www.microsoft.com$1

DirectoryIndex index.html
Options -Indexes
Автор: Cheery
Дата сообщения: 15.11.2008 18:20

Цитата:
в чем тут дело?

в том, что переменная
Цитата:
$DOCUMENT_ROOT

пуста.. ее нет, а есть $_SERVER['DOCUMENT_ROOT']
смотрите результат функции phpinfo() - в отношении переменных окружения и все станет ясно
Автор: CyberMo
Дата сообщения: 16.11.2008 15:24
в .htaccess прописал

Цитата:
RewriteEngine on

RewriteRule ^action/login/$ login.php

RewriteRule ^action/logout/$ logout.php

RewriteRule ^action/index/$ index.php

в итоге по указанному адресу выдаёт 404, в чём загвоздка?... только начал разбираться с этим делом...

Добавлено:
а, всё, разобрался.
в httpd.conf RewriteLogLevel 9 не прописал
Автор: Cheery
Дата сообщения: 16.11.2008 18:37
CyberMo

Цитата:
httpd.conf RewriteLogLevel 9 не прописал

эм.. эта опция нужна только для логгирования действий, а не работы самих правил
Автор: CyberMo
Дата сообщения: 17.11.2008 02:45
Cheery
странно, добавил только эту строчку и всё заработало. убрал её - 404.
Автор: Cheery
Дата сообщения: 17.11.2008 02:48
CyberMo

Цитата:
странно, добавил только эту строчку и всё заработало. убрал её - 404.

смотрите как раз логи преобразования - там будет очевидно.. либо попробуйте добавить


Цитата:
RewriteRule ^action/login/$ login.php [L]

RewriteRule ^action/logout/$ logout.php [L]

RewriteRule ^action/index/$ index.php [L]

так как, вполне возможно, ниже есть еще правила и проблема возникает из за них
Автор: Horor
Дата сообщения: 02.12.2008 11:21
вообщем трабла такая:
страница юзера по умолчанию
_http://www.сайт.ru/my.php?user=cooluser

хотелось бы выставить реврайтом
_http://www.сайт.ru/cooluser/

по идее в коде имя юзера вызывается
my.php?user=$row[0]

млин все перепробовал -запутолсо окончательно только....

хелп.

Добавлено:
попробовал:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ my.php?user=$1 [L,QSA]

сервак ошибку выдает((((
Автор: PEDKA
Дата сообщения: 02.12.2008 12:46
Horor
А других страниц типа _http://www.сайт.ru/page/ не будет?
Автор: Horor
Дата сообщения: 02.12.2008 13:09
будет, в зависимости от имени пользователя.

Добавлено:
я сделал так:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/?$ my.php?user=$1 [L]

работает
_http://www.сайт.ru/cooluser

а так не хочет.... плывет(((

_http://www.сайт.ru/cooluser/

я так понимаю он просто теряет ссылки на css и images

как жестко закрепить это дело?

Добавлено:
я так понимаю что-то типа символьных ссылок он должен генерировать
Автор: PEDKA
Дата сообщения: 02.12.2008 13:25
Horor

Цитата:
будет, в зависимости от имени пользователя.

Будет или не будет?

Я к чему клоню. Если ты создашь страницу, а не пользователя, по адресу _http://www.сайт.ru/blablabla/, то скрипт будет искать пользователя, а не страницу.
Автор: Horor
Дата сообщения: 02.12.2008 13:42
не, за папки не волнуйтесь) названия их таковы что ни одному здоровому человеку не придет в голову так себя назвать.


Цитата:

я сделал так:
RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/?$ my.php?user=$1 [L]

работает
_http://www.сайт.ru/cooluser

а так не хочет.... плывет(((
_http://www.сайт.ru/cooluser/
теряет путь к CSS и папке с картингами.


как жестко закрепить, не тыкая в страницы кучу ссылок? (довольно много исправлять придеться... или выхода нет?


Добавлено:
в смысле закрепить CSS и папку с картингами
Автор: PEDKA
Дата сообщения: 02.12.2008 17:04
Horor

Цитата:
я так понимаю он просто теряет ссылки на css и images

Использовать <base href />.
Автор: farik7
Дата сообщения: 02.12.2008 19:53
Horor
Читай http://www.phpfaq.ru/path
Автор: Qwezar
Дата сообщения: 03.12.2008 12:22
Проблема в следующем:
При использовании mod_rewrite, ссылки заменил с /?id=text на /text/, но как при этом запретить использование ссылок вида /?id=text ? Ведь они продолжают работать. Спасибо.
Автор: phpbbmods
Дата сообщения: 03.12.2008 13:45
Qwezar
проверяй strstr($_SERVER['REQUEST_URI'], "?id=")
ну а далее на 404 отправляй
Автор: sure777
Дата сообщения: 03.01.2009 01:13
этот топик уже читал и сейчас на всякий случай пречитал, но не могу вбиться в тему.допустим есть сайт site.ru там же каталог например Дима Билан.и как заставить чтоб в url отобразился именно http://site.ru/Дима Билан ?
Автор: ASE_DAG
Дата сообщения: 03.01.2009 01:54
sure777
А в каком именно месте затруднения? Что там не то отобразилось?
Большинство современных браузеров кириллицу отобразят. Пробел, скорее всего, так и останется "%20".

P.S. А вообще, не давали ли бы вы реальным каталогам такие имена.. ;-)
Автор: farik7
Дата сообщения: 22.01.2009 12:12
сделал новый двиг сайта, а старые адреса прописал в хтаксес
такое правило не срабатывает

Код: RewriteRule ^i.php?p=uf4$ /article/upakbiznes/upakbiznes4/ [L]

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.