Есть ли недостатки в использовании двойных слэшей в URL-адресах?

Я написал свою собственную структуру MVC в PHP, которая использует URL-адреса в формате:

/controller/method/param1/param2/param...

Я сделал так, чтобы методы «по умолчанию» можно было игнорировать (по умолчанию index() ), поэтому это приводит к URL-адресам, таким как /controller//param1/param2/param... Например, URL-адрес: /view//panel-glide/3 вызовет index('panel-glide', 3) в контроллере представления.

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

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

Solutions Collecting From Web of "Есть ли недостатки в использовании двойных слэшей в URL-адресах?"

На веб-мастерах существует существующий ответ, в котором обсуждается опасность наличия двух косых черт. Он много обсуждает Apache, но идеи должны применяться в целом.

По сути, я не думаю, что это рекомендуется. /foo/bar и /foo//bar действительно должен быть двумя совершенно разными путями . Каждая косая черта значительна, и попытки обхода этой стандартизации обязательно вернутся, чтобы укусить вас.

Как упоминается в ответе, существует также реальная опасность, что относительные пути не сработают. Некоторые браузеры будут правильно ../../fizz что относительный путь ../../fizz из /foo/bar//baz is /foo/bar/fizz , в то время как другие будут рассматривать двойную косую черту как одну, и выбрать /foo/fizz .

Плюс, я думаю, это выглядит забавно.

Apache рассматривает множественные слэши как одну косую черту. Это влияет на такие вещи, как RewriteRules , например, если у вас есть правило вроде этого:

 RewriteRule ^user/(.*)/([0-9]+)$ /user.php?id=$2 [QSA,L] 

Это поймает такие ссылки, как user/nomaD/500 но он не поймает user//500 поскольку он считает, что в качестве user/500

Другими словами, я не думаю, что ваша настройка будет работать, поскольку она будет обрабатывать param1 как method и смещать все оставшиеся параметры, если только они не имеют определенного типа. Я предполагаю, что это не влияет на ваш конкретный случай, но во многих ситуациях это будет недостатком использования // .