Использование .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 запроса и корневого пути вашего сайта. См. этот ответ для примера.