User 13204940 Ответов: 1

Интеллектуальное переключение каталогов .htaccess


Привет,

Скажем так у меня есть x.com и еще y.com. ВКЛ z.com, у меня есть каталог под названием x.com/ и еще один позвал: y.com/. У меня есть запись CNAME mapping x.com и еще y.com чтобы z.com.

Вот чего я хочу добиться;

Доступ к файлу осуществляется в одном из конечных доменов;
x.com/test.txt

Затем это должно быть сопоставлено с;
z.com/x.com/test.txt

То, как я думал об этом, таково::

RewriteCond %{REQUEST_URI} !^https:\/\/z\.com\/switch.php\?.+ [NC]
RewriteRule ^(.*) https://z.com/switch.php?f=$1 [R=301,NE,L]

Тогда я бы использовал switch.php для echo $_SERVER['HTTP_HOST']/file.txt где путь к файлу указан в $_GET['f'], помещенном туда с помощью файла .htaccess.

Мало того, что .htaccess вызывает бесконечный цикл, но я считаю, что это можно сделать только в .htaccess без switch.php вообще. Цикл происходит потому, что регулярное выражение не работает, чтобы исключить перезапись файла. Я бы предположил, что это происходит потому, что $1 не имеет группы захвата в регулярном выражении, но я понятия не имею, как создать группу захвата, имея отрицательное регулярное выражение. Мне нужно было бы сказать: "если это не switch.php?anything, установите $1 на то, что находится после имени хоста".

Добавление этого правила останавливает бесконечный цикл, но перезапись не происходит:

RewriteCond %{REQUEST_URI} ^https:\/\/z\.com\/(.+) [NC]

Если бы вы могли помочь мне исправить это, я был бы очень признателен.

Что я уже пробовал:

Все, что упоминалось в вопросе, плюс много гугления

1 Ответов

Рейтинг:
0

Jochen Arndt

Вы проверяете неправильную переменную REQUEST_URI. Который не содержит схемы (HTTP, HTTPS) и имени хоста:

REQUEST_URI
Компонент path запрашиваемого URI, например "/index.html". Это особенно исключает строку запроса, которая доступна как собственная переменная с именем QUERY_STRING.
Вы должны использовать HTTP_HOST вместо.

Я еще не пользовался и mod_rewrite много, но это должно быть просто, проверив, является ли хост x.com и если да то перенаправить на x.com подкаталог ВКЛ z.com:
RewriteCond %{HTTP_HOST} ^x\.com$
RewriteRule "^(.+)" "/x.com$1"
и то же самое для y.com.