Использование .htaccess для установки подкаталога в качестве корневого каталога
Есть ли способ использовать htaccess, чтобы указать подкаталог в качестве корня для всего сайта?
Например, если у меня был сайт под http://localhost/testsite/, и в нем файл index.php у меня была ссылка на таблицу стилей, используя следующий код..
<link rel="stylesheet" type="text/css" href="/css/layout.css" />
Могу ли я затем загрузить эту загрузку /localhost/testsite/css/layout.css?
Чтобы обойти эту проблему, я установил субдомены localhost для каждого сайта, который, хотя работает, не идеален.
Большое спасибо.
Ответы
Ответ 1
Если вы хотите сохранить часть 'href= "/css/layout.css", то да, вы можете настроить правило перезаписи. Вам просто нужно быть осторожным, чтобы не перенаправлять ничего, начиная с /testsite (или вы закончите цикл).
Как (в корневом .htaccess):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/testsite/.*$
RewriteRule ^(.*)$ /testsite/$1 [QSA,L]
Там вы сможете получить доступ к вашему файлу layout.css либо из:
http://localhost/testsite/css/layout.css
или
http://localhost/css/layout.css
Ответ 2
Конечно, все относительные URI (как ваши) относятся к базовому URI, который по умолчанию является URI документа:
http://localhost/testsite/index.php
Вам нужно только указать, какую часть добавить:
<link rel="stylesheet" type="text/css" href="./css/layout.css" />
^
` see this dot
Пример:
Base URI :: http://localhost/testsite/index.php
Relative URI :: ./css/layout.css
Result :: http://localhost/testsite/css/layout.css
Если вам нужно иметь это более модульное, есть несколько способов сделать это. Один из них - установить базовый URI явно внутри документа HTML (см. <base>
).
Другим является разрешение ссылок относительно серверной стороны на основе URI запроса и корневого пути вашего сайта. См. этот ответ для примера.