无法使用Apache Rewriterule将请求从一个虚拟主机重定向到另一个虚拟主机



我有两个虚拟主机,由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"

相关内容

最新更新