Я пытаюсь настроить свое приложение Django для работы под Apache с помощью modwsgi. Я определил следующий виртуальный хост:
<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>
Правила перезаписи в конце предназначены для того, чтобы 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].
Это изменение устраняет проблему. Буду признателен, если кто-нибудь сможет уточнить, почему часть /django.wsgi/ попадает в URL-адрес. Спасибо!
Ваше исходное правило перезаписи, вероятно, запутало вещи, потому что в совпавшем шаблоне $ 1 уже был '/', поэтому вы создали двойной слэш. Что произойдет, если вы воспользуетесь:
RewriteRule ^(.*)$ http://www.domain.com$1 [QSA,L,R=301]
и удалить лишнее правило?
ОБНОВЛЕНИЕ 1
Вы неверно истолковали то, что я имел в виду. Я говорил не о вашем обходном пути, а об исходном правиле.
Чтобы сделать более очевидным, что вы делаете неправильно и что может вызвать проблемы, используйте:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^/(.*)$ http://www.domain.com/$1 [L,R=301]
Обратите внимание, как я явно указал '/' вне подшаблона. Только так можно будет использовать знак «/» перед «$ 1». Если вы этого не сделаете, вы получите повторяющиеся косые черты.
Я также предлагаю отказаться от QSA. Примеры, которые я вижу в других местах в Интернете, тоже не используют.
Наконец, вам следует избегать "." в сопоставляемом имени хоста иначе может технически соответствовать чему-то, кроме буквального '.' также.
Итак, попробуйте это. Если проблема не исчезла, вам следует включить ведение журнала перезаписи модуля и посмотреть, что происходит. Возможно, в вашей конфигурации есть другие правила перезаписи, которые вызывают проблемы.
ОБНОВЛЕНИЕ 2
Хммм, наконец-то понял, что ваша настоящая проблема в том, что у вас есть правило перезаписи внутри контейнера директив каталога, а не снаружи.
Итак, переместите правила перезаписи непосредственно в VirtualHost, а не в директиву Directory.
Это происходит потому, что ваш веб-сервер устанавливает для SCRIPT_NAME значение «django.wsgi». Если добавить FORCE_SCRIPT_NAME = "" в свой settings.py, вы сможете обойтись без RewriteRule.
http://docs.djangoproject.com/en/dev/ref/settings/#force-script-name