Вот моя ситуация. У меня есть веб-корень и несколько подкаталогов, скажем:
/var/www
/var/www/site1
/var/www/site2
Из-за определенных ограничений мне нужна возможность хранить один домен и иметь отдельные папки, подобные этой. Это будет хорошо работать для меня, но многие ссылки на JS и CSS на обоих сайтах указывают на такие вещи, как:
"/js/file.js"
"/css/file.css"
Поскольку на эти файлы ссылаются абсолютно, они ищут каталоги 'js' и 'css' в / var / www, которых, конечно, не существует. Есть ли способ использовать RewriteRules для перенаправления запросов на абсолютно ссылочные файлы, чтобы указать на правильный подкаталог? Я пытался делать такие вещи, как:
RewriteEngine on
RewriteRule ^/$ /site1
или
RewriteEngine on
RewriteRule ^/js/(.*)$ /site1/js/$1
RewriteRule ^/css/(.*)$ /site1/css/$1
Но ни одна из этих работ, даже перенаправление только в один каталог, не говоря уже об обработке и site1, и site2. Возможно ли то, что я пытаюсь?
РЕДАКТИРОВАТЬ: РЕШЕНИЕ
В итоге я адаптировал совет Джона к своей ситуации. У меня есть возможность программно вносить изменения в мой файл .htaccess при каждом добавлении или удалении нового подкаталога. Для каждого «сайта», который я хочу, у меня есть следующий раздел в моем .htaccess:
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{HTTP_COOKIE} sitename=site1
RewriteCond %{REQUEST_URI} !^/site1/
RewriteRule ^(.*)$ /site1/$1 [L]
Index.php - это файл, который перечисляет все мои сайты, удаляет cookie «sitename» и устанавливает cookie «sitename = site #», когда выбирается конкретный. Моя проверка RewriteConds,
- Если запрос не для /
- Если запрос не для /index.php
- Если запрос содержит файл cookie "sitename = site1"
- Если запрос не начинается с "/ site1 /"
Если все эти условия выполнены, то запрос переписывается с добавлением "/ site1 /" перед запросом. Я попытался использовать один набор правил / правил, которые соответствовали бы (\ w +) вместо "site1" в третьем условии, а затем ссылались на% 1 в четвертом условии и в правиле, но это не сработало. Я сдался и согласился на это.