Подтвердить что ты не робот

Есть ли недостатки в использовании двойных слэшей в 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.

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

Кто-нибудь знает о каких-либо проблемах, которые могут возникнуть при использовании этого?

4b9b3361

Ответ 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 и сдвигать все оставшиеся параметры, если они не имеют определенного типа. Я думаю, это не повлияет на ваш конкретный случай, но во многих ситуациях это будет недостатком использования //.