Переписать .htaccess для перенаправления корневого URL в подкаталог

Попытка получить

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]

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

вопрос задан 13.06.2009
does_not_exist
репутация

19 ответов


  • 248 рейтинг

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

    RewriteEngine On
    RewriteRule ^$ /store [L]
    
    ответ дан does_not_exist, с репутацией , 25.08.2009
  • 114 рейтинг

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

    RedirectMatch ^/$ /store/
    

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

    ответ дан Dio Phung, с репутацией 3142, 16.01.2014
  • 103 рейтинг

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

    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]
    
    ответ дан Gumbo, с репутацией 493901, 13.06.2009
  • 75 рейтинг

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

    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]
    

    Сменить сайт. com и subdir с вашими ценностями.

    ответ дан Jage, с репутацией 6512, 26.04.2011
  • 20 рейтинг

    Еще один вариант, если вы хотите переписать 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-адрес.

    ответ дан gaborous, с репутацией 7164, 4.03.2013
  • 17 рейтинг

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

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

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

    до

    и

    до

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

    ответ дан starkeen, с репутацией 29121, 5.03.2016
  • 13 рейтинг

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

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

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

    ответ дан user1801050, с репутацией 131, 5.11.2012
  • 8 рейтинг

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

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

    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/*
    
    ответ дан inf3rno, с репутацией 13840, 15.06.2013
  • 6 рейтинг

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

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule (.*) http://www.example.com/store [R=301,L]
    
    ответ дан Nir O., с репутацией 829, 15.11.2011
  • 5 рейтинг

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

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

    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

    ответ дан Mahmoud Zalt, с репутацией 12886, 4.08.2015
  • 4 рейтинг

    Можно использовать Перенаправление тоже для этой цели

    Redirect 301 / www.example.com/store
    

    или Псевдоним для сопоставления

    Alias / /store
    

    Редактировать: mod_alias применимо только в httpd. конф.

    Ссылки

    ответ дан Abhishek Gurjar, с репутацией 5791, 7.02.2017
  • 4 рейтинг

    Раньше я использовал следующий код, который работает правильно, чтобы перенаправить корневой URL каждого из моих доменов / поддоменов в их подкаталоги соответствия, которые названы точно так же, как и сам подкаталог, как показано ниже:

    RewriteCond %{HTTP_HOST} ^sub1.domain1.com
    RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
    RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
    
    RewriteCond %{HTTP_HOST} ^sub2.domain1.com
    RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
    RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
    
    RewriteCond %{HTTP_HOST} ^sub1.domain2.com
    RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
    RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
    
    RewriteCond %{HTTP_HOST} ^sub2.domain2.com
    RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
    RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
    

    Однако, когда я хочу добавить другие подпрограммы или домены, это нужно будет добавить в приведенный выше код. Было бы намного удобнее упростить его, чтобы он работал как подстановочный знак (*) , как показано ниже:

    RewriteCond %{HTTP_HOST} ^sub
    RewriteCond %{REQUEST_URI} !/subs/
    RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
    

    Таким образом, всякий раз, когда добавляются другие субдомены / домены, если имя субдомена имеет префикс sub (например, sub3. domain1. com, sub1. DOMAIN3. ком и т. д. ) код останется действительным.

    ответ дан Chetabahana, с репутацией 3093, 16.02.2016
  • 3 рейтинг

    Я думаю, что основные проблемы с кодом вы отправили:

    • первая строка совпадает на хосте, начиная со строго сэмпла. ком, так что www. образец. ком не соответствует.

    • вторая строка хочет по крайней мере один символ, а затем www. образец. com, который также не соответствует (почему вы избежали первого w? )

    • ни одно из включенных правил не перенаправляет на URL, указанный вами в вашей цели (плюс, выборка с ошибкой указана как samle, но это не имеет значения).

    Для справки, вот код, который у вас есть:

    Options +FollowSymlinks
    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^sample.com$
    RewriteRule (.*) http://www.sample.com/$1 [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
    RewriteRule ^/(.*)$ /samle/%1/$1 [L]
    
    ответ дан Artem Russakovskii, с репутацией 13175, 13.06.2009
  • 3 рейтинг

    Немного погуглив, дает мне такие результаты:

    RewriteEngine на
    RewriteBase /
    RewriteRule ^ index. (. *)? $ http: // домен. ru / subfolder / [r = 301]

    Это перенаправит любую попытку получить доступ к файлу с именем index. что-то ваша подпапка, будь то файл существует или нет.

    Или попробуйте это:

    RewriteCond% {HTTP_HOST} ! ^ WWW. образец. com $ [NC]
    RewriteRule ^ (. *) $ % {HTTP_HOST} / samlse / $ 1 [R = 301, L]

    Я не сделал много перенаправления в. Файл htaccess, поэтому я не уверен, что это будет работать.

    ответ дан Steven, с репутацией 9618, 13.06.2009
  • 1 рейтинг

    Два пути из возможных решений для достижения этой цели: 1. Создайте файл .htaccess в корневой папке, как показано ниже (просто замените пример. com и my_dir с вашими соответствующими значениями):

    
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$
    RewriteCond %{REQUEST_URI} !^/my_dir/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /my_dir/$1
    RewriteCond %{HTTP_HOST} ^(www.)?example.com$
    RewriteRule ^(/)?$ my_dir/index.php [L] 
    
    
    1. Используйте RedirectMatch, чтобы перенаправить только корневой URL-адрес «/» в другую папку или URL-адрес,

      RedirectMatch ^ / $ http: // www. пример. com / my_dir

    ответ дан Mushtaq Hussain, с репутацией 621, 7.07.2017
  • 1 рейтинг

    попробуйте использовать ниже строки в htaccess

    Примечание: вам может понадобиться проверить, как называется имя по умолчанию. HTML

    по умолчанию. html - это файл, который по умолчанию загружается в корневую папку.

    RewriteEngine

    Redirect /default.html http://example.com/store/

    ответ дан Abouasy, с репутацией 471, 14.02.2013
  • 0 рейтинг

    Это попытается создать подкаталог, если файл не существует в корне. Нужно было это, так как я перешел на основной. html-сайт, который ожидает запуска на корневом уровне и помещает его в подкаталог. Работает только если все файлы плоские (нет. Обман htaccess в субдире возможен). Полезно для связанных вещей, таких как файлы CSS и JS.

    # Internal Redirect to subdir if file is found there.
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
    RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
    RewriteRule ^(.*)$ /subdir/$1 [L]
    
    ответ дан mikeytown2, с репутацией 1414, 26.03.2018
  • 0 рейтинг

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

    What am I doing wrong?
    

    Существует вероятность того, что% {HTTP_HOST} не заполняется должным образом или вообще не заполняется. Хотя я только видел, что это происходит только на одном компьютере с общим хостом, с некоторыми исправленными apache 2. 2, это возможность, тем не менее.

    ответ дан Μάκης Παλάσης, с репутацией 23, 21.03.2018
  • 0 рейтинг

    Вы просто добавьте этот код в свой. htaccess файл

    
        RewriteEngine On
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /folder/index.php [L]
    
    
    ответ дан karthikeyan ganesan, с репутацией 578, 22.08.2017