связывание css и javascript файлов при использовании динамически создаваемых поддоменов и mod_rewrite - PullRequest
0 голосов
/ 08 декабря 2011

Мне нужна помощь, чтобы понять, как связать файлы CSS и JavaScript при использовании поддоменов для моего сайта.

У нас есть CMS, которая позволяет пользователям иметь свой собственный поддомен (например, user1.mydomain.com). Мы хотим, чтобы пользователь перенаправлялся на страницу «site_index.php» и передавал поддомен в качестве параметра строки запроса при вводе своего поддомена, поэтому у нас есть следующее правило mod_rewrite в нашей конфигурации apache.

Вот это mod_rewrite внутри файла apache httpd.conf:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   ####RewriteBase /
   RewriteCond %{HTTP_HOST} !www.mydomain.com$ [NC]
   RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mydomain.com [NC]
   RewriteRule ^(.*)$  /administrator/sites_index.php?subdomain=%2 [L]
</IfModule>

На странице "sites_index.php" мы затем берем субдомен, проверяем его и представляем HTML для этого конкретного субдомена. Каждый пользователь может иметь свой собственный шаблон CSS. Проблема, с которой я столкнулся, связана с использованием относительного пути к файлам .css и .js. Вот как я хочу на них ссылаться:

<link href="public_site_templates/css_templates/common.css" type="text/css" rel="stylesheet">
<script src="public_site_templates/javascript/common.js" type="text/javascript"></script>

Что происходит с вышеуказанной ссылкой, так это загрузка HTML, но css и javascript никогда не связываются.

Если я жестко закодирую путь следующим образом:

<link href="http://www.mydomain.com/administrator/public_site_templates/css_templates/common.css" type="text/css" rel="stylesheet">
    <script src="http://www.mydomain.com/administrator/public_site_templates/javascript/common.js" type="text/javascript"></script>

тогда все связывается правильно. Я проверил «относительный путь», и все должно соединиться, но это не так.

Есть ли что-то, что я могу сделать, чтобы это исправить? Есть ли лучший способ, которым я должен делать это? Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Просто игнорируйте файлы js и css.

Я добавил: RewriteCond %{REQUEST_URI} !((.*).(js|css))$ [NC]:

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   RewriteCond %{REQUEST_URI} !((.*).(js|css))$ [NC]
   RewriteCond %{HTTP_HOST} !www.mydomain.com$ [NC]
   RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mydomain.com [NC]
   RewriteRule ^(.*)$  /administrator/sites_index.php?subdomain=%2 [L]
</IfModule>

Я не уверен, что регулярное выражение !((.*).(js|css))$ в порядке ... попробуйтеЭто!

Подскажите, пожалуйста, работает ли он?

Два совета:


Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такиепроблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE))!)

Могу ли я попросить вас добавить rewritelog в ваш вопрос?

0 голосов
/ 08 декабря 2011

HTML-тег <base> может быть тем, что вы ищете.

http://www.w3.org/TR/html4/struct/links.html#h-12.4

(при условии, что вы попробовали что-то подобное, но это не сработало)

<link href="/administrator/public_site_templates/css_templates/common.css" type="text/css" rel="stylesheet">
<script src="/administrator/public_site_templates/javascript/common.js" type="text/javascript"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...