Перенаправить на динамические относительные пути с помощью .htaccess? - PullRequest
4 голосов
/ 07 марта 2012

Можно ли заставить .htaccess "понимать" динамические относительные пути и правильно перенаправлять их?

Моя настройка выглядит следующим образом:

http://domain.com/htroot/aaa/xyz
http://domain.com/htroot/bbb/xyz
http://domain.com/htroot/ccc/xyz

И так далее. В качестве примера "htroot" содержит .htaccess, который мне нужно изменить. Следующие подуровни (aaa, bbb, ccc) могут быть любыми именами a-z0-9, и папки имеют index.php (или любой другой .php, на который нужно перенаправить). xyz должен работать как параметр сортировки, см. Следующую часть. Часть xyz отсутствует в файловой системе как «физическая» папка или файл.

Что мне нужно сделать, это следующее: Когда вы обращаетесь с помощью URL

http://domain.com/htroot/aaa/xyz

получает контент от

http://domain.com/htroot/aaa/ (or http://domain.com/htroot/aaa/index.php, either way)

где index.php запускается -> я могу получить xyz, проанализированный из REQUEST_URI, и обработать его для предоставления правильного содержимого, которое он указывает, в то время как URL страницы остается как http://domain.com/htroot/aaa/xyz, естественно.

До сих пор мне удавалось справиться с этим, если каждый подуровень (aaa и т. Д.) Имеет свой собственный .htaccess, но мне нужен такой, где есть только один .htaccess, расположенный в htroot, который обрабатывает это. Я предполагаю, что это может иметь какое-то отношение к параметрам $ 0 в .htaccess, но не уверен.

Ответы [ 3 ]

3 голосов
/ 07 марта 2012

Вы можете захотеть выполнить что-то вроде этого:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ /htroot/$1/index.php?data=$2 [L]

Если первое совпадение с подстановочным знаком (.*) равно aaa, а второе совпадение с подстановочным знаком (.*) равно xyz (htroot / aaa /xyz) он получит содержимое от

htroot / aaa / index.php? data = xyz

ивы сможете получить значение xyz в index.php с $_GET['data']

1 голос
/ 07 марта 2012

Это должно работать как общий набор правил:

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php 
RewriteRule ^(.*)/(.*) /htroot/$1/index.php?parameters=$2 [L,QSA]
1 голос
/ 07 марта 2012

Хорошо, есть кое-что, чего я не понимаю, в том, как это работает, я думаю, мне еще многое предстоит узнать о mod_rewrite.

Но вот так в файле htroot / .htaccess, это работает:

RewriteEngine On
RewriteRule ^aaa/(.*)$ aaa/index.php?$1 [L,QSA]
RewriteRule ^bbb/(.*)$ bbb/index.php?$1 [L,QSA]
RewriteRule ^ccc/(.*)$ ccc/index.php?$1 [L,QSA]

Вы сможете получить доступ к $ _GET ['xyz'] или к чему-либо, что вы добавили после / в свои скрипты index.php.Вы также получите бонусную запись «index_php» в массиве $ _GET, но я думаю, именно так работает внутренний редирект.

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