Are there any downsides to using double-slashes in

2019-01-24 06:01发布

问题:

I've written my own MVC framework in PHP, which uses urls in the format of:

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

I've made it so that "default" methods can be ignored (by default index()), so this results in URLs like /controller//param1/param2/param.... For example, a URL of: /view//panel-glide/3 will call index('panel-glide', 3) in the view controller.

This works fine and dandy, but I'm concerned that search engines or some older browsers might freak out when they see the double slashes, as I don't think I've actually seem them ever be used before.

Is anyone aware of any issues I might come across by using this?

回答1:

There is an existing answer on WebMasters that discusses the dangers of having two slashes. It discusses Apache a lot, but the ideas should be applicable generally.

In essence, I don't think it is recommended. /foo/bar and /foo//bar really should be two completely different paths. Each slash is significant, and attempts at circumventing that standardization are bound to come back to bite you.

As is mentioned in the answer, there's also a very real danger of relative paths failing. Some browsers will correctly figure that a relative path ../../fizz from /foo/bar//baz is /foo/bar/fizz, while others will treat the double slash as a single one, and opt for /foo/fizz.

Plus, I think it looks funny.



回答2:

Apache treats multiple slashes as a single slash. This affects things such as RewriteRules, e.g. if you have a rule like this:

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

That will catch links such as user/nomaD/500 but it will not catch user//500 since it treats that as user/500

So in other words, I don't think your setup will work since it will treat param1 as method and shift all the parameters left, unless they are of a specific type. I guess this doesn't affect your specific case, but in a lot of situations, this would be a downside to using //.