Ответ 1
Вы можете использовать правило перезаписи, которое использует ^ $ для представления корня и переписывает его в каталог /store, например:
RewriteEngine On
RewriteRule ^$ /store [L]
Попытка получить
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]
Что я делаю неправильно?
Вы можете использовать правило перезаписи, которое использует ^ $ для представления корня и переписывает его в каталог /store, например:
RewriteEngine On
RewriteRule ^$ /store [L]
Я был удивлен, что никто не упоминал об этом:
RedirectMatch ^/$ /store/
В основном, он перенаправляет корень и только корневой URL. Ответ возник из этой ссылки
Попробуйте следующее:
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]
Вот что я использовал для перенаправления в подкаталог. Это сделало это невидимым и до сих пор позволяет через запросы, которые соответствуют существующему файлу или тому подобное.
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 своими значениями.
Другой вариант, если вы хотите переписать 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-адрес.
Чтобы установить невидимую переадресацию из корня в подпапку, вы можете использовать следующий RewriteRule в /root/.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]
Приведенное выше правило внутренне перенаправляет браузер:
к
и
к
в то время как браузер останется в корневой папке.
Это казалось самым простым решением:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
Я получал петли перенаправления с некоторыми другими решениями.
Я не понимаю ваш вопрос...
Если вы хотите перенаправить каждый запрос в подпапку:
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/*
Я обнаружил, что для того, чтобы избежать кругового перенаправления, важно ограничить область перенаправления корневым каталогом. Я бы использовал:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]
Большинство приведенных выше решений являются правильными, но все они пропускают прозрачность перенаправления.
В моем случае при посещении 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
Раньше я использую следующий код, который правильно работает для перенаправления корневого 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.com и т.д.), код останется действительный.
Для этой цели можно использовать Redirect
Redirect 301 / www.example.com/store
Или Alias для отображения
Alias / /store
Изменить: mod_alias применим только в httpd.conf.
Refrences
Я думаю, что основные проблемы с кодом, который вы выложили:
первая строка совпадает с хостом, начинающимся со строго sample.com, поэтому www.sample.com не соответствует.
вторая строка требует, по крайней мере, одного символа, а затем www.sample.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]
Немного googling, дает мне следующие результаты:
RewriteEngine On
RewriteBase /
RewriteRule ^ index. (. *)? $http://domain.com/subfolder/[r = 301]Это приведет к перенаправлению любых попыток получить доступ к файлу с именем index.something вашей подпапки, будь то файл существует или нет.
Или попробуйте следующее:
RewriteCond% {HTTP_HOST}! ^ www.sample.com $[NC]
RewriteRule ^ (. *) $% {HTTP_HOST}/samlse/$1 [R = 301, L]
Я не делал много перенаправления в файле .htaccess, поэтому я не уверен, что это сработает.
попробуйте использовать ниже строки в htaccess
Примечание: вам может потребоваться проверить, что является именем default.html
default.html - это файл, загружаемый по умолчанию в корневую папку.
RewriteEngine
Redirect /default.html http://example.com/store/
Два пути выхода из возможных решений для этого:
1. Создайте файл .htaccess
в корневой папке в соответствии с (просто замените example.com и my_dir соответствующими значениями):
<IfModule mod_rewrite.c>
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]
</IfModule>
Используйте RedirectMatch только для перенаправления корневого URL "/" в другую папку или URL-адрес,
RedirectMatch ^/$http://www.example.com/my_dir
вы просто добавляете этот код в свой .htaccess файл
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
</IfModule>
Я отвечу на исходный вопрос, не указав еще один возможный синтаксис (есть много других ответов), но, указав на то, что мне когда-то приходилось иметь дело, потребовалось некоторое время, чтобы выяснить:
What am I doing wrong?
Существует вероятность того, что% {HTTP_HOST} заполняется неправильно или вообще не заполняется. Хотя, я видел только, что это происходит только на одной машине на общем хосте, с некоторым пользовательским исправленным apache 2.2, тем не менее, это возможность.
Это попробует subdir, если файл не существует в корне. Это необходимо, поскольку я переместил основной веб-сайт.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]