0

我被这个困住了,我在网络服务器领域的技能很差......

我有一个 Nginx 作为运行 mod_wsgi 和 mod_rewrite 的 Apache2 的代理。我想要做的是将每个 URL 从 www.example.com 重写为 example.com,即在服务之前从每个 URL 请求中剥离 www 部分。这是不同 conf 文件的布局:

=== /etc/nginx/sites-enabled/example.com ===:

http://dpaste.com/82638/

=== /etc/apache2/sites-enabled/example.com ===:

http://dpaste.com/hold/82645/

=== /home/nabuco/public_html/example.com/example/apache/example.wsgi ===:

http://dpaste.com/82643/

在我的旧设置中,我有一个运行 mod_python 的 Apache2,我唯一要做的就是放置一个 .htaccess 文件,如下所示:

Options -Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]

那工作得很好。

但我尝试将相同的 .htaccess 文件放入 /home/nabuco/public_html/nomadblue.com/nomadblue/apache/.htaccess。如果我在不带 www 的情况下发出请求,例如http://example.com/http://example.com/whatever,则一切顺利。但是,如果我尝试http://www.example.com/的 www 版本,我将被重定向到:

http://example.com/example.wsgi/

我是否必须从 nginx 运行重写规则?我也尝试过,将其添加到 nginx conf 文件中:

rewrite ^/(.*) http://example.com/$1 permanent;

但现在我得到了firefox所说的“循环循环”......

那么我能把这个(我猜是微不足道的)事情搞定吗?

提前致谢,

赫克托

4

2 回答 2

2

最简单的就是用nginx重写。将该重写规则放在绑定到 www.example.com 的专用“服务器”中

服务器 {
  听 80;
  server_name www.example.com;
  重写 ^/(.*) http://example.com/$1 永久;
}
于 2009-08-20T12:26:00.663 回答
1

好吧,我找到了避免循环循环的解决方案……通过server在我的 nginx 配置文件中创建两个部分,一个用于 www.example.com——它具有 rzab 建议的重写规则——另一个用于 example.com ,其中包含所有其余指令。

于 2009-08-23T08:43:33.730 回答