Переписать .htaccess для перенаправления корневого URL в подкаталог - PullRequest
236 голосов
/ 13 июня 2009

пытаюсь получить

www.example.com

чтобы перейти непосредственно к

www.example.com/store

Я пробовал несколько битов кода, но ни один не работает.

Что я пробовал:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

Что я делаю не так?

Ответы [ 19 ]

262 голосов
/ 25 августа 2009

Вы можете использовать правило перезаписи, которое использует ^ $ для представления корня и перезаписи его в каталог / store, например:

RewriteEngine On
RewriteRule ^$ /store [L]
128 голосов
/ 16 января 2014

Я был удивлен, что никто не упомянул это:

RedirectMatch ^/$ /store/

По сути, он перенаправляет корневой и только корневой URL. Ответ возник из этой ссылки

107 голосов
/ 13 июня 2009

Попробуйте это:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

Если вы хотите внешнее перенаправление (которое приводит к тому, что браузер-посетитель отображает перенаправленный URL), также установите флаг R:

RewriteRule ^$ /store [L,R=301]
77 голосов
/ 26 апреля 2011

Вот что я использовал для перенаправления в подкаталог. Это делало это незаметно и до сих пор позволяет проходить запросы, которые соответствуют существующему файлу или чему-либо еще.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

Измените site.com и subdir со своими значениями.

23 голосов
/ 05 марта 2016

Чтобы установить невидимое перенаправление из корневой папки в подпапку, вы можете использовать следующую RewriteRule в /root/.htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

Приведенное выше правило внутренне перенаправляет браузер с:

до

И

до

пока браузер останется в корневой папке.

20 голосов
/ 05 марта 2013

Другой вариант, если вы хотите переписать URL-адрес и скрыть исходный URL-адрес:

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

При этом, например, если вы наберете http://www.example.com/product.php?id=4, он будет прозрачно открывать файл на http://www.example.com/store/product.php?id=4, но не показывать пользователю полный URL.

13 голосов
/ 05 ноября 2012

Это казалось самым простым решением:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

Я получал петли перенаправления с некоторыми другими решениями.

8 голосов
/ 16 июня 2013

Я не понимаю вашего вопроса ...

Если вы хотите перенаправить каждый запрос в подпапку:

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

Если вы хотите перенаправить в подпапку с именем домена

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*
6 голосов
/ 04 августа 2015

Большинство вышеприведенных решений верны, но им не хватает прозрачности перенаправления.

В моем случае при посещении www.example.com я хотел перенаправиться в подкаталог / store , но без обновления URL-адреса до www.example.com / магазин . (все, что я хочу, это получить код страницы из этого каталога). Если это ваш случай, решение ниже работает отлично.

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

источник: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory

6 голосов
/ 15 ноября 2011

Я обнаружил, что во избежание циклического перенаправления важно ограничить область перенаправления корневым каталогом. Я бы использовал:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
...