Злоупотребление Mod Rewrite для чистой файловой системы и красивых URL - PullRequest
0 голосов
/ 29 июля 2010

У меня есть несколько файлов php, которые выполняют несколько разных работ.Я хотел бы изменить способ, которым мои клиенты получают доступ к этим файлам php, чтобы сделать его более чистым для конечного пользователя.Система Mod_Rewrite показала, что она может делать довольно мощные вещи, находясь в руках правого администратора сервера.Поэтому мне было интересно, как далеко вы можете злоупотреблять правилами Mod Rewrite для более чистой файловой системы и красивых URL-адресов.Учитывая, что сами PHP-файлы используют строки запросов для получения своих данных, я хотел бы указать, как строится строка запроса, исходя из того, насколько глубоко мы зашли в систему поддельных файлов.

URL нашего веб-сайтаhttp://www.domain.tld/, но мы будем называть его domain.tld для краткости.Я хотел бы отобразить несколько разных адресов на несколько разных строк запроса в нескольких разных файлах.Но я также хотел бы быть расширяемым по прихоти.

Или, во-первых, все, что проходит за domain.tld/series/, должно быть направлено на скрипт domain.tld/series.php с любым (поддельным) каталогом, прошедшим сериюстать частью строки запроса для series.php.То же самое должно случиться со всем, что направлено в направлении domain.tld/users/, которое должно быть перенаправлено в файл domain.tld/users.php.

Так что если бы у нас были URL-адреса вроде domain.tld/series/Master/2010/ или domain.tld/series/Novice/Season 01/, они все равно были быперенаправляется на сценарий domain.tld/series.php, но со строкой запроса ?0=Master&1=2010 и ?0=Novice&1=Season 01.Но если я захочу получить обзор серии Master, я могу перейти по URL domain.tld/series/Master/ и получить строку запроса всего ?0=Master.Идея состоит в том, что правило перезаписи должно обеспечивать бесконечное расширение.

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

Вот как я это делаю, и это работает бесконечно:

RewriteRule ^((/?[^/]+)+)/?$ ?q=$1 [L]

Хитрость в том, что весь путь передается в качестве единственного параметра, q, в index.php,Так, например, domain.tld/series/Novice/Season 01/ становится domain.tld/?q=series/Novice/Season 01.Затем вы можете сделать:

<?php
$params = explode('/', $_GET['q']);
var_dump($params);
?>

, чтобы получить отдельные части.

array(3) { 0 => 'series', 1 => 'Novice', 2 => 'Season 01' }
2 голосов
/ 29 июля 2010

Невозможно быть полностью динамичным в такой системе и иметь, как вы говорите, «бесконечную расширяемость».Вы должны будете определить RewriteRule для каждого «уровня», который вы разрешите в своем URL, или альтернативно сопоставить все после первого «уровня» как одну переменную и выполнить работу с PHP.

Пример1

RewriteRule ^([^/]+)/?$ /$1.php
RewriteRule ^([^/]+)/([^/]+)/?$ /$1.php?0=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /$1.php?0=$2&1=$3

Пример 2

RewriteRule ^([^/]+)/(.*)/? /$1.php?qs=$2

Очевидно, что это только очень простые примеры, и вам, вероятно, придется использовать RewriteConds и т. Д. Для освобожденияопределенные файлы и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...