Почему мы не используем такие форматы URL? - PullRequest
1 голос
/ 10 июля 2010

Я перерабатываю форматы URL моего проекта.Основной формат наших поисковых URL-адресов выглядит следующим образом: -

www.projectname/module/search/<search keyword>/<exam filter>/<subject filter>/... other params ...

При поиске без поискового ключевого слова и фильтра экзамена URL-адрес будет: -

www.projectname/module/search///<subject filter>/... other params ...

Мой вопрос: почемумы видим такие URL с косой чертой (3 косые черты после www.projectname / module / search)?Обратите внимание, что я больше не использую правила переписывания .htaccess в своем проекте.Этот URL прекрасно работает функционально.Итак, должен ли я использовать этот формат?

Для более подробной информации о том, почему мы выбрали этот формат, пожалуйста, проверьте мой другой вопрос: - Предложите лучший стиль URL

Ответы [ 2 ]

1 голос
/ 10 июля 2010

Веб-серверы обычно удаляют несколько слэшей до того, как приложение увидит запрос, для обеспечения совместимости и безопасности. При обслуживании простых файлов обычно разрешается использовать любое количество слешей между сегментами пути как один слеш.

Пустые сегменты пути URL не являются недействительными в URL, но их обычно избегают, поскольку относительные URL с пустыми сегментами могут неожиданно анализироваться. Например, в /module/search ссылка на //subject/param относится не к файлу, а к серверу subject с путем /param.

Возможность увидеть последовательности из нескольких слешей из исходного URL-адреса зависит от вашего сервера и среды приложения. Например, в CGI (и других основанных на нем стандартах шлюза) переменная PATH_INFO, которая обычно используется для реализации маршрутизации, обычно пропускает несколько слэшей. Но в Apache есть нестандартная переменная окружения REQUEST_URI, которая дает исходную форму запроса, не выбрасывая косую черту и не выполняет% -unescaping, как PATH_INFO. Поэтому, если вы хотите разрешить пустые сегменты пути, вы можете, но это сократит ваши параметры развертывания.

Существуют и другие строки, кроме пустой строки, которые также не образуют хороших сегментов пути. Использование закодированного / (% 2F), \ (% 5C) или нулевого байта (% 00) по умолчанию блокируется многими серверами. Таким образом, вы не можете поместить любую старую строку в сегмент; его нужно будет обработать, чтобы удалить некоторые символы (часто «слаг», чтобы удалить все, кроме букв и цифр). Пока вы делаете это, вы можете также заменить пустую строку на _.

0 голосов
/ 10 июля 2010

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

Например: http://news.bbc.co.uk/sport и http://news.bbc.co.uk//////////sport обе отображают одну и ту же страницу в Firefox и Chrome. Сервер обрабатывает два URL-адреса как одно и то же, в то время как ваш сервер явно этого не делает.

Я не уверен, определено ли это поведение где-то или нет, но, похоже, оно имеет смысл (по крайней мере, для сайта BBC - если я набираю extra /, он делает то, что имел в виду).

...