.htaccess: перенаправить корневой URL-адрес в подкаталог, но сохранить корневой URL-адрес
Я нахожусь в процессе очистки структуры каталогов моего домена (горе мне за настройку содержимого корневого URL в корневом каталоге!) И мне нужно немного узнать о том, как правильно использовать RewriteRule.
Суть
Я хочу, чтобы domain.tld использовал domain.tld / subdirectory /, но по-прежнему отображается как domain.tld в URL.
Мой.htaccess Пока
Options +FollowSymlinks
RewriteEngine On
#Force removal of wwww subdomain
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.domain.tld
RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L]
#Trailing slash
RewriteRule ^/*(.+/)?([^.]*[^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]
#Redirect root url to subdirectory
RedirectMatch 301 ^/subdirectory/$ http://domain.tld/
RewriteRule ^/$ /subdirectory/?$ [L]
RedirectMatch прекрасно работает. К сожалению, кажется, что последний RewriteRule должен работать достаточно просто, но это не так. Старая настройка содержимого в корневом каталоге по-прежнему отображается.
Что мне здесь не хватает?
Обновление: решено
Простое исправление: я не достаточно опытен с.htaccess / apache, чтобы объяснить, почему.
Я имел:
RewriteRule ^/$ /subdirectory/?$ [L]
Удаление одной косой черты исправило все:
RewriteRule ^$ /subdirectory/?$ [L]
Итак, теперь мой вопрос: почему это так?
4 ответа
Попробуй это:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/subdirectory/
# REWRITES ALL URLS
# [REPLACE "domain" WITH THE ACTUAL DOMAIN,
# WITHOUT THE TLD (.com, .net, .biz, etc)]
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.
# REWRITE ALL THOSE TO subdirectory
RewriteRule ^(.*)$ /subdirectory/$1 [L]
БР Спирос
Часть URI в RewriteRule
не содержит предшествующий слеш
Чтобы соответствовать http://example.com/
ты должен использовать RewriteRule ^$
где RewriteRule ^/$
будет теоретически соответствовать http://example.com//
(обратите внимание на двойную косую черту).
Дополнительно: ?$
в конце не имеет никакого смысла, так как это добавит строку запроса с пустым параметром $
,
Наконец у вас есть: RewriteRule ^$ /subdirectory/ [L,QSA]
Оба правила действительны:
Этот будет использоваться в конфигурации сервера или в контексте виртуального хоста (URL начинается с косой черты):
RewriteRule ^/$ /subdirectory/ [L]
Если вы поместите то же правило в .htaccess, то вы должны удалить начальную косую черту (потому что это относительно текущей папки):
RewriteRule ^$ /subdirectory/ [L]
PS Флёрн уже упоминал о ?$
это целевая часть URL. Нет необходимости $
совсем. Если вы закончите свой URL с ?
это говорит Apache не переносить строку запроса на новый URL (полностью удалить строку запроса).
Дополнительно, [QSA]
Флаг требуется только если вы манипулируете строкой запроса (есть ?
в целевом URL) и все еще хотел бы, чтобы ваша текущая строка запроса была добавлена к вновь созданному URL. Это означает, что в этом правиле RewriteRule ^$ /subdirectory/ [L,QSA]
[QSA]
Флаг вообще ничего не делает и может быть безопасно удален.
Я попробовал решение, но в моем случае удаляет /folder/ НО, показывая старый сайт (www.site.it), а не www.site.it/folder/ с удаленной "папкой"... Я скопировал и вставил то же самое код, но не работает в моем случае:(я открыл новую тему: .htaccess: перенаправить корневой URL WordPress на другой WordPress в подкаталоге, но сохранить корневой URL