2015-09-16 43 views
0

我將Django應用程序部署到默認情況下需要用戶登錄所有內容的環境,但是如果您啓動的URL爲/public,例如/public/forums (這是一種安全措施,默認情況下保護所有內容,並明確定義應該公開訪問的內容)。Django公開URL重寫

我決定在urls.py前加上/public作爲我想公開的所有網址的前綴。這工作,但我不想/public顯示。我加入.htaccess

RewriteEngine On 

RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC] 
RewriteRule^%1 [L,NE,R=302] 

RewriteRule ^((?!public/).*)$ public/$1 [L,NC] 

然而,我的服務器與LimitInternalRecursion回來。

我該如何解決這個問題以實現一個沒有公開的URL?

回答

0

您的RewriteCond正在由您的RewriteRule觸發。也就是說,你正在重寫一個URL來激發你的重寫,因此是遞歸錯誤。這是因爲您在RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]中的正則表達式正在捕捉所有內容,甚至是/public/forums/。看看這個保存的例子:https://regex101.com/r/dI8cH4/1。並嘗試得到一個更簡單的重寫首先工作(如你的登陸/主頁):

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule /public/ http://example.com/ 
+1

感謝您的回答,讓我研究和測試了這一點。 – John