Мой сайт настроен так:
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ([^.]+)\.example\.com [NC]
RewriteRule ^/?$ /user/profile.php?name=%1 [L]
Это происходит, если пользователь посещает: test.example.com
, он покажет содержимое файла: example.com/user/profile.php?name=test
. Если кто-то пойдет lol.example.com
, он покажет страницу: example.com/user/profile.php?name=lol
но URL-адрес останется таким же, как и для поддомена, например test.example.com
и lol.example.com
.
Эта часть работает.
Вопрос:
Если я пойду в test.example.com/login
, он покажет корневой файл моего домена. Как сделать так, чтобы он показывал вещи из /user
папка?
Например:
test.example.com/login
покажет example.com/user/login
и test.example.com/register
покажет example.com/user/register
а URL останется прежним с поддоменом?
test.example.com/pathtofile
должен получить содержимое example.com/user/pathtofile
. "pathtofile" должен быть динамическим. Я просто хочу, чтобы путь смотрел в папке /user
, а не корневая папка.
если кто-то пойдет в
lol.example.com
, он покажет страницу:example.com/user/profile.php?name=lol
.
Строго говоря, он покажет страницу: lol.example.com/user/profile.php?name=lol
(поддомен не удаляется). Но поскольку (я предполагаю) все поддомены и основной домен указывают на одно и то же место в файловой системе, это работает.
test.example.com/pathtofile
должен получить содержимоеexample.com/user/pathtofile
Ваша исходная директива только перезаписывает запрос на корень документа (test.example.com/
). Переписать /pathtofile
тогда вы можете добавить еще один блок правил после указанного выше в .htaccess
. Например:
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} [^.]+\.example\.com [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteRule !^user/ /user/%1 [L]
Это перезаписывает все запросы, которые еще не запускаются /user/
и которые состоят только из одного сегмента пути (ненулевой длины), как в вашем примере (например, /pathtofile
и нет /path/to/file
) и переписывается на /user/pathtofile
.
ОБНОВИТЬ: Если у вас есть ErrorDocument
После этого вам нужно будет сделать исключение ранее в вашем файле `.htaccess, чтобы предотвратить перезапись подзапросов для документа об ошибке. Например:
RewriteRule ^404\.php$ - [L]