Относительные URL и косые черты - PullRequest
33 голосов
/ 28 марта 2011

Я уже просматривал этот вопрос в Интернете и подозреваю, что ответ «вы не можете», но, поскольку я еще не нашел ответ, который является настолько окончательным, я думаю, что здесь стоит спросить.Самое близкое, что я обнаружил, касающееся этой проблемы, это Тайна косой черты и относительного URL (который в настоящее время недоступен, но у Google есть кешированная версия только для текста ).

Из-за традиционного дизайна URL-адресов с косой чертой, интерпретируемой как каталог, и без косой черты, интерпретируемой как файловый ресурс, и относительных URL-адресов, работающих вне каталога, тогда, если текущая страница имеетпуть

/lorem/ipsum/dolor

относительный путь

not-dolor

будет преобразован в

/lorem/ipsum/not-dolor

, что, естественно, имеет смысл, когда /lorem/ipsum/dolor рассматривается как файлресурс dolor, сидящий в каталоге /lorem/ipsum/;типичные, интуитивные соглашения.Однако, поскольку значительное количество веб-сайтов в настоящее время являются динамическими приложениями без сопоставления файловой системы для каждого URL-адреса, это может вызвать головную боль, потому что иногда вы действительно хотите работать по отношению к пути, как если бы в текущем проекте имел место косая черта.

Существует ли какой-либо разумный способ («не включающий обработку на стороне сервера / переменные / другие или JavaScript») использовать относительный путь, основанный на текущем пути, и не каталог "текущего пути?Так что not-dolor может быть относительно /lorem/ipsum/dolor и производить

/lorem/ipsum/dolor/not-dolor

Не существует никакого обходного пути, о котором я знаю, связанного с чем-то вроде ./not-dolor, поскольку . все еще (/lorem/)ipsum/.Если не считать перенаправления на конечную косую черту и проверки того, что все ресурсы имеют URL-адреса, соответствующие характеру каталогов и файлов, или изменения спецификации (!), Есть ли способ решить эту проблему?

1 Ответ

16 голосов
/ 28 марта 2011

Нет.

Проблема связана не столько с отображением директора / файла (которое никогда не ожидалось, как с тем, как должно происходить сопоставление, допускается только как удобное сопоставление, которое все еще часто удобно).

Это больше связано с тем простым фактом, что dolor - это не то же самое, что dolor/, и вы хотите дать новый URI из ссылки относительно dolor/ при объединении с одним окончанием в dolor.

Что может быть решением, так это постоянно действовать с /lorem/ipsum/dolor/.То есть вообще никогда не говорить о /lorem/ipsum/dolor, только о /lorem/ipsum/dolor/.В конце концов, поскольку сопоставление каталогов / файлов, как вы говорите, не единственный способ сделать что-то, нет никаких причин, по которым имена ваших ресурсов не всегда должны заканчиваться косой чертой.

Действительно, в любом случае это может иметь больше смысла, поскольку, используя такие относительные ссылки, вы подразумеваете, что между /lorem/ipsum/dolor/not-dolor и /lorem/ipsum/dolor существует какая-то связь.Теперь, хотя /lorem/ipsum/dolor/not-dolor может не иметь большого отношения к /lorem/ipsum/dolor/, подразумевается, что это может быть в URI (да, URI непрозрачны, но, хотя на некоторых уровнях они должны рассматриваться как непрозрачные, они позволяет отражать отношения, и именно поэтому относительные ссылки на URI имеют смысл).Поэтому, возможно, /lorem/ipsum/dolor/ более четко отражает ваше общее сопоставление URI-ресурсов (если этого не произойдет, вы все равно не захотите переходить от dolor к not-dolor).

Теперь этосводится к перенаправлению на конечный слеш, которого, как вы говорите, вы хотите избежать (или, что еще лучше, никогда не ведете кого-либо к dolor в первую очередь), но его преимущества теперь кажутся лучше, чем просто удобство более простых относительных URI.

...