2016-11-30 120 views
0

我們有一個當前正在Wordpress上運行的網站。我們正在開發一個Django站點來取代它。加班,目標是用Django慢慢替換部分WordPress的網站。我們通常會設置此Django的是這樣的:將ProxyPass網站安裝在與wordpress相同的根網址處

ProxyPass /newcontent/static ! 
ProxyPass /newcontent uwsgi://127.0.0.1:3031/ retry=0 
ProxyPassReverse /newcontent uwsgi://127.0.0.1:3031/newcontent/ retry=0 

這將在ourwebsite.com/newcontent安裝的Django/uWSGI應用。但是,這意味着所有的Django URL都將以該根目錄開頭,所以類似於ourwebsite.com/newcontent/aboutus。除非在conf中特別指出,否則有沒有辦法配置Apache將所有請求轉到Wordpress的地方?我可以想象,製作大量的uWSGI條目將是實現它的一種方式,但是然後Django正在看到各種各樣的基本路徑,這在內部並不是很好。

最終,這將是最好的,如果我可以這樣做:

# Normal Wordpress config, DirectoryIndex, etc 

# Django Specific Stuff 
/about-us    # Goes to Django 
/admin/*     # Django admin 
/our-products/*   # This and all subpaths to Django 
/static/*    # Same, all static content 

此外,我們爲HTTPS總是在Django的網站,所以這將是最好也重定向任何Django的服務網址爲https在Apache中。

隨着時間的推移,我們會慢慢取代wordpress網址直到最後,Django是唯一的服務。在這一點上,我們可以清理配置,將所有URL發送到Django。

回答

0

一個解決方案是使用ProxyPassMatch。下面是一個未經測試的例子:

ProxyPassMatch "^/newcontent/((one|two|three|four)(/|$).*) uwsgi://127.0.0.1:3031/$1 retry=0 

在這方面,例如,onetwothreefour是應該由Django的提供服務的URL。

如果ProxyPassMatch不能這樣做,它肯定可以用mod_rewrite來完成。

正則表達式很難理解。即使你沒事,你周圍的其他人也不會。所以最好避免它們。因此,一個替代的解決方案,如果可能的話,是要列出WordPress的網址,而非Django的網址:

ProxyPass /newcontent/five ! 
ProxyPass /newcontent/six ! 
ProxyPass /newcontent uwsgi://... 

其中fivesix是由WordPress送達。


更新:我睡在我的答案,我不知道;你說

我可以想像,使許多uWSGI條目將做這件事,但隨後Django的是看到各種各樣的基路徑,其內部不那麼有效。

那麼下面的問題會是什麼?

ProxyPass /newcontent/one uwsgi://127.0.0.1:3031/one 
ProxyPass /newcontent/two uwsgi://127.0.0.1:3031/two 
相關問題