Назад | Перейти на главную страницу

.htaccess путь к поддомену с подстановочными знаками

Мой сайт настроен так:

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 папка?

Например:

если кто-то пойдет в 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]