2016-12-03 93 views
2

我有兩臺虛擬主機,由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 

回答

0

在虛擬主機方面,RewriteRule模式最初將針對URL後,部分匹配主機名和端口以及查詢字符串之前,所以它在開始時有斜槓。這應該這樣做:

RewriteRule ^/django/(.*)$ http://django.localhost:8080/$1" 
+0

我應該把它放在PHP虛擬主機定義? – Jacobian

+0

不幸的是,它不起作用。我仍然重定向到php.localhost:8080/django並得到相同的錯誤。 – Jacobian

+0

是的,你應該把它放在上面的.conf中,而不是你的RewriteRule。此外,這個規則不會只匹配'/ django'(沒有結尾的斜槓),請嘗試'Go to Django!' –