Django公共URL重写

时间:2015-09-16 02:24:19

标签: python django .htaccess

我正在将一个Django应用程序部署到一个环境中,默认情况下需要用户登录所有内容,但是如果您使用/public启动URL,则允许您在没有登录的情况下显示特定的URL,例如{ {1}}(这是一项安全措施,默认情况下保护所有内容,并明确定义应公开访问的内容)。

我决定将/public/forums中要公开的所有网址加上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]

如何修复此问题以实现不公开的网址?

1 个答案:

答案 0 :(得分: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/