我有兩臺虛擬主機,由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
我應該把它放在PHP虛擬主機定義? – Jacobian
不幸的是,它不起作用。我仍然重定向到php.localhost:8080/django並得到相同的錯誤。 – Jacobian
是的,你應該把它放在上面的.conf中,而不是你的RewriteRule。此外,這個規則不會只匹配'/ django'(沒有結尾的斜槓),請嘗試'Go to Django!' –