Есть ли недостатки в использовании двойных слэшей в URL-адресах?
Я написал свою собственную структуру MVC в PHP, которая использует URL-адреса в формате:
/controller/method/param1/param2/param...
Я сделал так, чтобы методы "по умолчанию" можно было игнорировать (по умолчанию index()
), поэтому это приводит к URL-адресам, таким как /controller//param1/param2/param...
. Например, URL-адрес: /view//panel-glide/3
будет вызывать index('panel-glide', 3)
в контроллере view
.
Это работает отлично и денди, но я обеспокоен тем, что поисковые системы или некоторые более старые браузеры могут волноваться, когда они видят двойные косые черты, так как я не думаю, что на самом деле они кажутся им раньше.
Кто-нибудь знает о каких-либо проблемах, которые могут возникнуть при использовании этого?
Ответы
Ответ 1
Существует существующий ответ на WebMasters, в котором обсуждаются опасности наличия двух слэшей. Он много обсуждает Apache, но идеи должны применяться в целом.
В сущности, я не думаю, что это рекомендуется. /foo/bar
и /foo//bar
действительно должны быть двумя совершенно разными путями. Каждая косая черта важна, и попытки обхода этой стандартизации обязательно вернутся, чтобы укусить вас.
Как упоминается в ответе, существует также очень реальная опасность относительных путей. Некоторые браузеры будут правильно понимать, что относительный путь ../../fizz
из /foo/bar//baz
равен /foo/bar/fizz
, в то время как другие будут рассматривать двойную косую черту как одну и выбрать /foo/fizz
.
Плюс, я думаю, это выглядит забавно.
Ответ 2
Apache рассматривает множественные слэши как одну косую черту. Это влияет на такие вещи, как RewriteRules
, например. если у вас есть правило вроде этого:
RewriteRule ^user/(.*)/([0-9]+)$ /user.php?id=$2 [QSA,L]
Это поймает ссылки, такие как user/nomaD/500
, но не поймает user//500
, так как он рассматривает это как user/500
Иными словами, я не думаю, что ваша настройка будет работать, так как будет обрабатывать param1
как method
и сдвигать все оставшиеся параметры, если они не имеют определенного типа. Я думаю, это не повлияет на ваш конкретный случай, но во многих ситуациях это будет недостатком использования //
.