【发布时间】:2012-12-09 23:26:34
【问题描述】:
我试图解决这一整天都没有成功,所以我希望有人能够帮助我。我在http://localhost/ 有一个应用程序,它使用 Pylons 作为我托管的应用程序。除此之外,我需要托管一个 PHP/MySQL 站点,所以我也必须使用 Apache。
我目前的设置是我将 haproxy 与此配置一起用于 Apache 后端:
backend apache
mode http
timeout connect 4000
timeout server 30000
timeout queue 60000
balance roundrobin
server app02-8002 localhost:8002 maxconn 1000
这是由此触发的:
acl image url_sub images
use_backend apache if image
所以,当我打开我的 IP/图像时,它会触发它并打开 Apache,然后使用端口 8002。
对于 Apache,我创建了虚拟主机,这是“图像”:
<VirtualHost *:8002>
ServerAdmin my@email.com
ServerName image
ServerAlias image
DocumentRoot /srv/www/image/public_html/
ErrorLog /srv/www/image/logs/error.log
CustomLog /srv/www/image/logs/access.log combined
</VirtualHost>
所以,一切都很好,当我输入 IP/images 时,它会打开 /srv/www/image/public_html。但随后问题来了。由于我使用的是图像上传脚本,它涉及大量重写,所以我必须启用该模块。这是位于 public_html/images 文件夹中的 .htaccess(我不知何故也不得不制作这个子文件夹,以将 URL 与 public_html 中的实际位置“匹配”。 SetEnv PHP_VER 5_3
RewriteEngine On
# You must define your installation directory and uncomment the line :
RewriteBase /images/
RewriteRule ^([a-zA-Z]+)\.(jpg|gif|png|wbmp)$ controller/Resizer.php?m=original&a=$1&e=$2 [L]
RewriteRule ^(icon|small|medium|square)\/([a-zA-Z]+)\.(jpg|gif|png|wbmp)$ controller/Resizer.php?m=$1&a=$2&e=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) application.php?request=$1 [L,QSA]
所以,基本上,这在某种程度上是行不通的。我猜想这个虚拟主机、子目录、重写什么的有冲突,但是我似乎无法隔离它。
有点令人困惑的是,当我打开 IP/images/xxxx.jpg 时,它会打开位于 public_html/images/upload/original 文件夹中的图像,因此重写工作正常。其他规则似乎不起作用。所有的缩略图和较小的版本都没有正确呈现(图标、小、中、方形),这使得网站非常不可用。
这里是开发服务器的链接:http://localhost/images/
提前感谢您的时间和帮助!
【问题讨论】:
标签: apache mod-rewrite virtualhost