Apache .htaccess перенаправление, если папка отсутствует - PullRequest
1 голос
/ 08 февраля 2012

У меня есть веб-сайт, на котором мне нужно сделать следующее

, если http://example.com/user1 не существует, перенаправить пользователя на http://user1.example.com

Аналогично http://www.example.com/user2 следует перенаправить на http://user2.example.com

Возможно ли это с помощью файла .htaccess?

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) http://%{HTTP_HOST} [R]

Выше перенаправляет на домашнюю страницу, но как я могу прочитать URL после / и сделатьредирект, как указано выше?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012
RewriteCond %{SERVER_NAME} =example.com      # prevent infinite redirection
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^/]+)$
RewriteRule .* http://%1.%{SERVER_NAME} [R]

Несколько громоздкое регулярное выражение в REQUEST_URI гарантирует, что будут перенаправляться только URL-адреса схемы http://example.com/user1 (в отличие от /user1/foo/bar).

Обратите внимание на использование SERVER_NAME вместо HTTP_HOST (последнее является злом и его следует избегать ).

1 голос
/ 08 февраля 2012

Попробуйте добавить следующее в файл .htaccess в корневом каталоге вашего сайта example.com.

RewriteEngine on 
RewriteBase / 

#if on example.com host
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
#and the directory/folder does not exist
RewriteCond %{REQUEST_FILENAME} !-d
#redirect to folder.example.com
RewriteRule ^(\w+)$ http://$1.%{HTTP_HOST} [R,L]
...