【问题标题】:linking css and javascript files when using dynamically created subdomains and mod_rewrite使用动态创建的子域和 mod_rewrite 时链接 css 和 javascript 文件
【发布时间】:2011-12-07 21:12:25
【问题描述】:

在为我的网站使用子域时,我需要一些帮助来弄清楚如何链接 css 和 javascript 文件。

我们有一个 CMS,它允许用户拥有自己的子域(例如 user1.mydomain.com)。我们希望用户被引导到“site_index.php”页面,并在他们输入子域时将子域作为查询字符串参数传递,这就是为什么我们在 apache 配置中有以下 mod_rewrite 规则的原因。

这是 apache httpd.conf 文件中的 mod_rewrite:

<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>

然后一切都正确连接。我检查了“相对路径”,一切都应该链接起来,但它没有。

我可以做些什么来解决这个问题吗?我应该这样做有更好的方法吗?任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    只需忽略 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)!)

    我可以请你在你的问题中添加重写日志吗?

    【讨论】:

    • 试过这个,但得到了相同的结果。无论如何感谢您的帮助。
    • 基本原则是仅在不匹配“以css或js结尾”的正则表达式时才应用这些规则=> !(\.(css|js))$ 也许我的正则表达式是不好,但我敢肯定,如果你找到符合原则的合适人选,一切都会奏效。
    【解决方案2】:

    html &lt;base&gt; 标签可能就是您要查找的内容。

    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>
    

    【讨论】:

    • 这行得通,但与我之前所做的硬编码 url 并没有太大区别。无论如何感谢您的回复。
    • 嗯,我想我不确定你在找什么。您希望这些 URL 看起来如何?
    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2023-04-06
    • 2016-01-13
    相关资源
    最近更新 更多