0

我们使用 Apache 2.x、Plesk 8.x 的 Linux 服务器托管了许多电子商务网站。为了利用浏览器缓存,我们想使用 Google 提供的 jquery.js 副本。

因此,在每个的 vhost.conf 文件中,我们可以使用以下 RewriteRule

RewriteCond %{REQUEST_FILENAME} jquery.min.js [nc]
RewriteRule . http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js [L]

在 vhost_ssl.conf 中

RewriteCond %{REQUEST_FILENAME} jquery.min.js [nc]
RewriteRule . https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js [L]

好的,现在这些规则在每个域的各个 vhost.conf 文件中都可以正常工作。但是,我们托管了 200 多个域,我希望它们能够工作,但似乎无法让它们在 httpd.conf 文件中全局工作。

挑战如下:

  1. 让 rewriterule 在 httpd.conf 中工作
  2. 检测 HTTPS 是否开启,如果开启并且是安全页面,则重写为 ...
  3. 每个单独的域仍然有它自己的自定义 mod-rewrite 规则。哪些规则优先 - 全局或每个域?他们结合了吗?如果我在全局 httpd.conf 中有“RewriteEngine On”指令,然后又在 vhost.conf 中,可以吗?

请让我知道你们的建议是什么。迫切需要解决这个问题。

4

1 回答 1

1

我同意 Gumbo 的观点,但你可以这样做:

1.. 让rewriterule在httpd.conf中工作

正如手册中明确指出的那样:

默认情况下,来自主服务器上下文的 mod_rewrite 配置设置不会被虚拟主机继承。要将主服务器设置应用于虚拟主机,您必须在每个部分中放置以下指令:

RewriteEngine On
RewriteOptions Inherit

 

2..检测HTTPS是否打开,如果是并且是安全页面,重写为...

这可以通过查看 %{HTTP_HOST} 来完成:

RewriteCond %{HTTPS} !=on
RewriteRule /jquery\.min\.js$ https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js [NC,R=permanent]

RewriteCond %{HTTPS} =on
RewriteRule /jquery\.min\.js$ http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js [NC,R=permanent]

您还应该避开点,并且您使用的 RewriteCond 是不必要的;您可以在 RewriteRule 中执行此操作。

3.. 每个单独的域仍然有它自己的自定义 mod-rewrite 规则。哪些规则优先 - 全局或每个域?他们结合了吗?如果我在全局 httpd.conf 中有“RewriteEngine On”指令,然后又在 vhost.conf 中,可以吗?

它将被添加到虚拟主机的 mod_rewrite 配置中。

于 2010-05-20T01:46:55.163 回答