无法使用Apache RewriteRule将请求从一台虚拟主机重定向到另一台虚拟主机
问题描述:
我有两台虚拟主机,由Apache Web服务器提供服务。一台主机用于PHP应用程序,另一台用于Django/Python应用程序。他们两个都很好,我没有问题。在这一刻我的httpd-vhosts.conf看起来像这样:无法使用Apache RewriteRule将请求从一台虚拟主机重定向到另一台虚拟主机
Listen 8080
<VirtualHost *:8080>
DocumentRoot "c:/Apache24_32/htdocs/accent"
ServerName php.localhost
<Directory c:/Apache24_32/htdocs/accent>
Options Indexes FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
DirectoryIndex
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
</VirtualHost>
<VirtualHost *:8080>
ServerName django.localhost
WSGIScriptAlias/"c:/Apache24_32/htdocs/django/accent/wsgi.py"
<Directory "c:/Apache24_32/htdocs/django/accent">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
没关系。当我去php.localhost
,我看到我的PHP应用程序,当我去django.localhost
,我看到我的Django应用程序。尼斯。但我想要的是将请求从我的第一个PHP应用程序重定向到我的Django应用程序,以便每当URL中有/django/
部分时,我将被重定向到django.localhost
。例如,该URL
php.localhost:8080/django/
应该被映射到
django.localhost:8080
这个网址
php.localhost:8080/django/test
应该被映射到
django.localhost:8080/test
我试图用重写规则,但无济于事。这是我的尝试:
Listen 8080
<VirtualHost *:8080>
DocumentRoot "c:/Apache24_32/htdocs/accent"
ServerName php.localhost
<Directory c:/Apache24_32/htdocs/accent>
Options Indexes FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
DirectoryIndex
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
#New lines
RewriteEngine on
RewriteRule "^django/(.*)$" "django.localhost:8080/$1"
</VirtualHost>
<VirtualHost *:8080>
ServerName django.localhost
WSGIScriptAlias/"c:/Apache24_32/htdocs/django/accent/wsgi.py"
<Directory "c:/Apache24_32/htdocs/django/accent">
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
正如你所看到的,我已经将这两行的第一虚拟主机描述:
RewriteEngine on
RewriteRule "^django/(.*)$" "django.localhost:8080/$1"
但是,这是行不通的。我像这样检查了它。在我的index.php页面我添加了一个参考:
<a href="/django">Go to Django!</a>
但是,当我点击它,我重定向到http://php.localhost:8080/django,看到此错误消息:
未找到
请求在此服务器上找不到URL/django。
我不擅长配置Apache,希望有人能帮助我。非常感谢!
PS
我要补充,这行是在httpd.conf中取消注释:
LoadModule rewrite_module modules/mod_rewrite.so
答
在虚拟主机方面,RewriteRule模式最初将针对URL后,部分匹配主机名和端口以及查询字符串之前,所以它在开始时有斜杠。这应该这样做:
RewriteRule ^/django/(.*)$ http://django.localhost:8080/$1"
我应该把它放在PHP虚拟主机定义? – Jacobian
不幸的是,它不起作用。我仍然重定向到php.localhost:8080/django并得到相同的错误。 – Jacobian
是的,你应该把它放在上面的.conf中,而不是你的RewriteRule。此外,这个规则不会只匹配'/ django'(没有结尾的斜杠),请尝试'Go to Django!' –