在URL中使用双斜线是否有任何缺点?

时间:2012-06-29 04:46:52

标签: php url url-rewriting uri url-routing

我在PHP中编写了自己的MVC框架,它使用的格式为:

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

我已经做到这一点,以便可以忽略“默认”方法(默认情况下为index()),因此会产生/controller//param1/param2/param...之类的网址。例如,/view//panel-glide/3的网址会在index('panel-glide', 3)控制器中调用view

这很好用而且花花公子,但我担心搜索引擎或者一些旧浏览器在看到双斜线时可能会惊慌失措,因为我认为我以前看不到它们曾经被用过。

有人知道我使用此可能会遇到的任何问题吗?

2 个答案:

答案 0 :(得分:14)

WebMaster上存在一个讨论dangers of having two slashes的答案。它讨论了很多Apache,但这些想法一般都适用。

从本质上讲,我不认为这是推荐的。 /foo/bar/foo//bar确实应该是两条完全不同的路径。每一个斜线都是重要的,试图绕过这种标准化必然会再次咬你。

正如答案中所提到的,相对路径失败的非常真实危险。某些浏览器正确表示来自../../fizz的相对路径/foo/bar//baz/foo/bar/fizz,而其他浏览器会将双斜杠视为单个路径,并选择{ {1}}。

另外,我觉得它看起来很有趣。

答案 1 :(得分:3)

Apache将多个斜杠视为单斜杠。这会影响RewriteRules之类的内容,例如如果您有这样的规则:

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

这会捕获user/nomaD/500之类的链接,但它不会捕获user//500,因为它会将其视为user/500

换句话说,我认为您的设置无法正常工作,因为它会将param1视为method并将所有参数移位,除非它们属于特定类型。 我想这不会影响您的具体情况,但在很多情况下,这将是使用//的缺点。