使用mod_wsgi对nginx + apache2进行简单的重写规则

时间:2009-08-19 10:11:39

标签: apache mod-rewrite apache2 nginx mod-wsgi

我坚持这一点,我在网络服务器领域的技能很差......

我有一个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所谓的“循环循环”......

那么我能得到这个(我猜是微不足道的)呢?

提前致谢,

2 个答案:

答案 0 :(得分:2)

最简单的是用nginx重写。将重写规则放在绑定到www.example.com

的专用“服务器”中
server {
  listen 80;
  server_name www.example.com;
  rewrute ^/(.*) http://example.com/$1 permanent;
}

答案 1 :(得分:1)

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