【问题标题】:Point External Domain and Sub Directories to Site's Folder将外部域和子目录指向站点的文件夹
【发布时间】:2012-04-21 20:07:25
【问题描述】:

我们网站中的许多页面都使用旧的子域来存储图像、css 和 javascript 文件。我从新手开发人员那里继承了这个项目,他们没有使用任何通用的设计模板。结果是数百页对内容的静态引用,示例如下:

http://static.foo.bar/css/sample.css
http://static.foo.bar/brochure/css/sample.css
http://static.foo.bar/company/newsletter/js/common.js
http://static.foo.bar/images/version2/header.jpg

...以及数百个其他地点。我需要将它们全部指向主域而不是子域,而无需在 .htaccess 文件中为每个域创建规则。所以:

http://static.foo.bar/css/sample.css 
should point to: 
http://www.foo.bar/css/sample.css

http://static.foo.bar/brochure/css/sample.css
should point to: 
http://www.foo.bar/brochure/css/sample.css

http://static.foo.bar/company/newsletter/js/common.js
should point to: 
http://www.foo.bar/company/newsletter/js/common.js

http://static.foo.bar/images/version2/header.jpg
should point to: 
http://www.foo.bar/images/version2/header.jpg

我知道这是可能的,只是我不是服务员。任何帮助将不胜感激。

【问题讨论】:

    标签: linux apache .htaccess


    【解决方案1】:

    在文档根目录中创建一个.htaccess 文件,内容如下:

    将此添加到您的服务器配置中,%{HTTP_HOST} 检查不适用于 .htaccess

    <IfModule mod_rewrite.c>
    # bad matching: RewriteCond %{HTTP_HOST}   !^static\.foo\.bar [NC]
    #
    # correction, matching everything other than www.foo.bar :
    RewriteCond %{HTTP_HOST}   !^www\.foo\.bar$ [NC]
    RewriteCond %{HTTP_HOST}   !^$
    RewriteRule ^/(.*)         http://www.foo.bar/$1 [L,R]
    </IfModule>
    

    http://httpd.apache.org/docs/2.0/misc/rewriteguide.html#url

    更新: 稍等一下,如果它托管在同一台服务器上,只需添加

    ServerAlias static.foo.bar
    

    到 www.foo.bar 配置也可以提供静态内容。

    根据反馈更新 #2:

    这应该在 .htaccess 文件中工作(在我的电脑上工作),这会将所有来自 static.foo.bar/* 的请求重定向到 www.foo.bar/*

    RewriteCond %{HTTP_HOST}    ^static\.foo\.bar [NC]
    RewriteRule ^(.*)$          http://www.foo.bar/$1 [R,L]
    

    不,ServerAlias 命令仅适用于 VirtualHost 配置:

    http://httpd.apache.org/docs/2.2/mod/core.html#serveralias

    【讨论】:

    • 嗨。谢谢你的建议。这适用于子域的根目录及其子目录吗?
    • 这会将请求从一个主机名重定向到另一个主机名,并使用相同的整个路径,无论路径是什么,以及您在问题中的书写方式。
    • 虽然不工作。我尝试替换 foo.bar/nonexistent/$1 [L,R] 作为测试,这应该会导致错误 404,但所有 css 和图像仍在成功地从子域中获取。
    • 嗨塔马斯。其实是反过来的。我不希望旧的子域迎合静态文件。我想托管我们主域中的所有内容。此外,我无法访问 http.conf,这意味着我暂时只能使用 .htaccess 作为选项。
    • 这两个实例是否共享文档根目录?您是否有权访问旧实例的文档根目录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 2013-11-22
    • 1970-01-01
    • 2012-10-23
    • 2023-04-01
    • 2023-03-07
    • 2016-06-28
    相关资源
    最近更新 更多