5 rewrite django mod-wsgi apache-2.2
我正在尝试将 Django 应用程序设置为使用 modwsgi 在 Apache 下运行。我定义了以下虚拟主机:
<VirtualHost *>
ServerName www.domain.com
ServerAlias domain.com
WSGIScriptAlias / /home/domain/apache/django.wsgi
<Directory /home/domain/apache>
Order deny,allow
Allow from all
Options -Indexes +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [QSA,L,R=301]
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
最后的重写规则是为了使 www.domain.com 成为规范的站点名称。但还是有什么问题。当我浏览到 > http://domain.com时,我被重定向到 > http://www.domain.com/django.wsgi/。浏览 > http://www.domain.com效果很好。
我的配置中是否缺少某些内容?谢谢。
更新:我将 RewriteRule 更改为
RewriteRule ^django.wsgi/(.*)$ domain.com/$1 [L,R=301].
Run Code Online (Sandbox Code Playgroud)
此更改解决了该问题。如果有人能详细说明为什么 /django.wsgi/ 部分最终出现在 URL 中,我将不胜感激。谢谢!
您最初的重写规则可能会混淆一些事情,因为匹配的 $1 模式中已经有一个“/”,因此您创建了一个双斜杠。如果您使用以下内容会发生什么:
RewriteRule ^(.*)$ http://www.domain.com$1 [QSA,L,R=301]
Run Code Online (Sandbox Code Playgroud)
并删除你的额外规则?
更新1
你误解了我的意思。我不是在谈论你的解决方法,而是原始规则。
为了更明显地看出您做错了什么以及可能导致问题的原因,请使用:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^/(.*)$ http://www.domain.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
请注意我是如何在子模式之外明确列出“/”的。只有这样才可以在“$1”之前使用“/”。如果不这样做,您将得到重复的斜线。
我还建议放弃 QSA。我在互联网上其他地方看到的示例也没有使用它。
最后,你应该转义“.”。在匹配的主机名中,从技术上讲,else 可以匹配文字“.”以外的内容。以及。
所以,试试吧。如果仍然存在问题,那么您应该启用重写模块日志记录并查看发生了什么。您的配置中可能有一些其他重写规则导致了问题。
更新2
嗯,终于意识到您的实际问题是您的重写规则位于 Directory 指令容器内部而不是外部。
因此,将重写规则移至 VirtualHost 的内部,而不是 Directory 指令。
归档时间: |
|
查看次数: |
1965 次 |
最近记录: |