我有两个虚拟主机,由Apache Web服务器提供。一个主机用于PHP应用程序,另一个用于Django/Python应用程序。他们两个都很好,我对此没有任何问题。此刻,我的httpd-vhosts.conf看起来像:
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
和此url
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
在VirtualHost上下文中,重写模式最初将与主机名和端口之后以及查询字符串之前的URL部分匹配,因此它具有开始的斜线。这应该做:
RewriteRule ^/django/(.*)$ http://django.localhost:8080/$1"