htaccess переписывает некорректное добавление URL с путем к файлу конфигурации mod_wsgi

В настоящее время я занимаюсь переносом доменов [old_domain] -> [new_domain].

Проблема возникла, когда я дошел до правил htaccess и файла конфигурации в /etc/httpd/conf/httpd.conf:

httpd.conf

AllowOverride All

Изначально я не мог найти, где разместить вышеупомянутое, чтобы разрешить работу правил перезаписи .htaccess, и я все еще обеспокоен тем, что могу неправильно разрешить это для всех.

Я пробовал вставить что-то вроде, но безрезультатно:

<Directory "/path/to/django/project/">
    AllowOverride All
</Directory>

Как только я получил работающие перезаписи файла .htaccess (используя следующее), URL-адреса начали возвращать что-то странное.

.htaccess в каталоге проекта django

RewriteEngine On
RewriteCond %{HTTP_HOST} !^old_domain.com/$ [NC]
RewriteRule ^(.*)$ http://new_domain.com/$1 [L,R=301]

URL отправлен

http://old_domain.com/news/

URL получен

http://new_domain.com/apache/production.wsgi/news/

Почти там ... но может ли кто-нибудь предположить, почему это могло происходить? Я действительно не хочу удалять /apache/production.wsgi/ на стороне new_domain (если этого не ожидается?)

Заранее спасибо.

Изменить: одно быстрое исправление, включенное с использованием django HttpResponsePermanentRedirect. Это плохая практика?


person Ogre    schedule 01.05.2013    source источник
comment
Использование HttpResponsePermanentRedirect означает, что ваше приложение django будет попадать при каждом перенаправлении. Лучшей практикой было бы минимизировать количество затронутых систем до того, как произошло перенаправление. Django находится на один уровень глубже в стеке, поэтому при возврате ответа перенаправления возникают дополнительные накладные расходы. Очевидно, что если вы обслуживаете минимальный трафик, накладные расходы вряд ли стоит учитывать ...   -  person Roja Buck    schedule 02.05.2013
comment
Отредактируйте свой вопрос и предоставьте конфигурацию mod_wsgi относительно того, как вы монтируете свое приложение WSGI. Вы используете WSGIScriptAlias ​​или Alias ​​/ AddHandler. Также см. Примечания о перезаписи в code.google.com/p/modwsgi/wiki/   -  person Graham Dumpleton    schedule 02.05.2013
comment
Перенаправления django находятся на старом сервере, который больше не используется, поэтому дополнительное попадание не является большой проблемой. Когда смогу, вставлю конфигурацию WSGI.   -  person Ogre    schedule 02.05.2013


Ответы (1)


Если вы хотите использовать директиву rewrite в своей папке django, вам необходимо включить переопределения. В противном случае они будут проигнорированы:

http://httpd.apache.org/docs/current/mod/core.html#allowoverride.

Надеюсь, это поможет переписать:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^newdomain\.com 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

Не забудьте разграничить периоды в домене вашего RewriteCond. В регулярном выражении. означает "соответствовать всем"

person Roja Buck    schedule 01.05.2013
comment
Спасибо, Роя. Я попробую это сделать. Я действительно забыл установить границы между точками. - person Ogre; 02.05.2013