Заставьте Django работать с или без - PullRequest
5 голосов
/ 17 января 2012

У меня есть приложение django, которое имеет / в конце каждого URL-адреса. Пример:

# user home page
(r'^home/$', 'user_home_page'),

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

# user home page
(r'^home$', 'user_home_page'),
(r'^home/$', 'user_home_page'),

или я должен избегать подобных ссылок?

Ответы [ 6 ]

8 голосов
/ 17 января 2012

Хотя вы можете принять и то и другое без переадресации, используя:

(r'^home/?$', 'user_home_page'),

Это не лучшая практика SEO, потому что похоже, что у вас есть дублированный контент, и ваши хиты будут разделены между двумя страницами.

6 голосов
/ 17 января 2012

Вы можете изменить настройку APPEND_SLASH Django, я не использовал ее раньше.

Вам может быть интересно, что произойдет, если кто-то запросит URL / привет (то есть без завершающей косой черты),Поскольку наш URLpattern требует конечной косой черты, этот URL не будет совпадать.Однако по умолчанию любой запрос к URL, который не соответствует URLpattern и не заканчивается косой чертой, будет перенаправлен на тот же URL с косой чертой.(Это регулируется настройкой APPEND_SLASH Django, которая описана в Приложении D.)

Это взято из http://djangobook.com/en/2.0/chapter03/

2 голосов
/ 17 января 2012

мне следует избегать таких ссылок?

Да. Django уже обрабатывает это для вас.

См. Это: https://docs.djangoproject.com/en/1.3/ref/middleware/#module-django.middleware.common

Если APPEND_SLASH имеет значение True и начальный URL-адрес не заканчивается косой чертой, и он не найден в URLconf, то новый URL формируется добавляя косую черту в конце. Если этот новый URL-адрес найден в URLconf, затем Django перенаправляет запрос на этот новый URL. В противном случае Первоначальный URL обрабатывается как обычно.

2 голосов
/ 17 января 2012

Шаблоны Регулярные выражения Python .Как насчет:

(r'^home(/?)$', 'user_home_page'),
1 голос
/ 15 мая 2012

Вместо этого используйте промежуточное ПО Django REMOVE_SLASH.

https://gist.github.com/2204099

https://gist.github.com/gists/2204099/download

0 голосов
/ 17 января 2012

Вы должны убедиться, что ваше приложение использует / последовательно, сделать выбор, который использовать, и 301 перенаправить мошенническое изменение на правильный канонический.

Должна быть только одна версия страницы, иВ большинстве случаев правильным решением является перенаправление 301 на каноническую версию.

В некоторых ситуациях с дополнительными параметрами для отслеживания вы также должны определить каноническое в заголовке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...