CentOS 5.7上的Plone 3.3.5 Apache 2.2虚拟主机RewriteRule问题

时间:2012-02-10 19:51:42

标签: apache mod-rewrite plone zope httpd.conf

我在CentOS 5.7上安装了Plone 3.3.5并将Zope放在了Apache之后,为了让URL“看到”我的Plone网站,我使用了虚拟主机和重写规则的概念。但是,虽然网页确实正确显示,但结果的网址并不漂亮。

编辑过的httpd.conf文件:

NameVirtualHost 164.67.141.42:80

<VirtualHost 164.67.141.42:80>
    ServerName www2.oid.ucla.edu
    ServerAlias www2.oid.ucla.edu 
    ServerAdmin web@oid.ucla.edu
    ServerSignature On

    CustomLog  /var/log/httpd/www2-access.log combined
    ErrorLog   /var/log/httpd/www2-error.log
    LogLevel warn

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*) http://www2.oid.ucla.edu:8080/VirtualHostBase/http/www2.oid.ucla.edu:80/Plone/VirtualHostRoot/$1 [L]
 </IfModule>

<IfModule mod_proxy.c>
   ProxyVia On

   # prevent the webserver from being used as proxy
   <LocationMatch "^[^/]">
      Deny from all
      </LocationMatch>
   </IfModule>

</VirtualHost>

结果网址=“http://www2.oid.ucla.edu:8080/VirtualHostBase/http/www2.oid.ucla.edu:80/Plone/VirtualHostRoot/”

网址应为=“http://www2.oid.ucla.edu/”

如果我将“P”添加到RewriteRule ^ /(。*)http://www2.oid.ucla.edu:8080/VirtualHostBase/http/www2.oid.ucla.edu:80/Plone/VirtualHostRoot/$1 [L,P] 它在网页上出现“服务暂时不可用”错误。

错误日志说: [错误](13)权限被拒绝:代理:HTTP:尝试连接到164.67.141.42:8080(*)失败

导致这种情况的原因是什么?提前谢谢!

3 个答案:

答案 0 :(得分:1)

确保mod_proxy处于活动状态且已启用,并且您的apache已设置为允许代理。 '[L,P]'中的'P'表示'代理',而mod_rewrite本身不会这样做

答案 1 :(得分:1)

起初我以为你应该看看你的zope配置设置,认为它可能绑定到localhost但你没有代理标志的例子会触发重定向到域名,我收集的实际上返回了一个真正的Plone响应。所以这可能不是它。

SELinux设置可能存在问题。要测试它,请尝试以root身份...

$ echo 0&gt; / selinux的/执行

这会暂时禁用SELinux。如果代理现在有效,您就找到了问题。在这种情况下,以下内容可能对您有帮助......

$ / usr / sbin / setsebool -P httpd_can_network_connect 1

但是我建议你不要再使用这个修补程序,直到你读完SELinux了。在不了解您正在做什么的情况下,在服务器的安全配置上扭动旋钮可能并不明智。

可能与您的问题没有直接关系,但这里有一些其他建议:

1)您不需要ServerAlias系列。列出的域已列为ServerName。

2)其他人已经指出你需要'P'标志。在这种情况下,“L”标志本身只会生成重定向,这不是您想要的。带有'P'标志,暗示'L',所以只需[P]即可。

3)Martijn提到的betabug.ch网站没问题,但请注意它也错误地添加了'L'标志并假设某些请求中可能不存在初始'/'(在VirtualHost上下文中,路径将始终以'/'开头 - 它只在目录上下文中,您必须担心这在Plone设置中从未有过)。这些都不会破坏RewriteRule - 它们只会不必要地混乱配置。

4)您不需要LocationMatch位来防止代理滥用。您正在设置反向代理,而不是转发代理。这是需要特别照顾的前瞻性代理。如果您不确定您是否拥有转发代理 - 或者您是偏执狂 - 只需使用“ProxyRequests off”明确关闭转发代理行为。您通常不需要担心这一点,因为ProxyRequests默认是关闭的。

答案 2 :(得分:0)

$ setenforce 0

另一方面,阅读selinux的一些文档。有一种方法可以让它吞下这个apache配置。

SELinux,你的朋友,为了舒尔,但小心对待HIM:)