Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在URL中使用双斜杠有什么缺点吗?_Php_Url_Url Rewriting_Uri_Url Routing - Fatal编程技术网

Php 在URL中使用双斜杠有什么缺点吗?

Php 在URL中使用双斜杠有什么缺点吗?,php,url,url-rewriting,uri,url-routing,Php,Url,Url Rewriting,Uri,Url Routing,我已经用PHP编写了自己的MVC框架,它使用以下格式的URL: /controller/method/param1/param2/param… 我这样做是为了可以忽略“default”方法(默认情况下index()),因此这会产生类似/controller//param1/param2/param…的URL。例如,URL:/view//panel glide/3将在视图控制器中调用索引('panel-glide',3) 这很好用,但我担心搜索引擎或一些老的浏览器在看到双斜杠时可能会发疯,因为我觉

我已经用PHP编写了自己的MVC框架,它使用以下格式的URL:

/controller/method/param1/param2/param…

我这样做是为了可以忽略“default”方法(默认情况下
index()
),因此这会产生类似
/controller//param1/param2/param…
的URL。例如,URL:
/view//panel glide/3
将在
视图
控制器中调用
索引('panel-glide',3)

这很好用,但我担心搜索引擎或一些老的浏览器在看到双斜杠时可能会发疯,因为我觉得我以前从来没有使用过双斜杠


有人知道我在使用此工具时可能遇到的任何问题吗?

关于网站管理员,有一个现有的答案讨论了这个问题。它对Apache进行了很多讨论,但是这些想法应该是普遍适用的

本质上,我认为这是不推荐的
/foo/bar
/foo//bar
应该是两条完全不同的路径。每一个斜杠都是重要的,试图绕过标准化的尝试肯定会反过来伤害你

正如答案中所提到的,还有一个非常真实的相对路径失败的危险。一些浏览器会正确地计算出
/foo/bar//baz
的相对路径
/foo/bar/fizz
,而其他浏览器会将双斜杠视为单斜杠,并选择
/foo/fizz


另外,我认为它看起来很有趣。

Apache将多个斜杠视为一个斜杠。这会影响诸如重写规则之类的事情,例如,如果您有这样的规则:

RewriteRule ^user/(.*)/([0-9]+)$ /user.php?id=$2 [QSA,L]
它将捕获诸如
user/nomaD/500
之类的链接,但不会捕获
user//500
,因为它将其视为
user/500


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

的一个缺点,只是一个旁注:为什么不强制执行控制器/方法的刚性结构?param1=value1¶m2=value2。。。?对我来说似乎更像RPC。@例如,LiorCohen Drupal接受您建议的格式,但将url重写为OP的格式。他可能只是忽略了这是在幕后进行的。我主要关心的是灵活性,而不是严格的结构强制。我的输入类仍然可以访问查询字符串参数(例如,
$this->input->get('param
')`将返回
value1
)。我想允许URI段被解析为方法参数(比如在CodeIgniter中),以便于使用和更好的URL(比如
/blog/post/hello world foo bar baz
)搜索引擎问题:Apache Solr的JSON解析器无法处理双斜杠;向JSON语法添加注释的扩展被破坏,斜杠将注释掉string@Potatoswatter我认为你应该把它作为一个答案,我同意。作为开发人员,它看起来很有趣。作为一个用户,它看起来很有趣。事实上,如果我将该url标记为书签,并且链接被破坏,我希望删除额外的/来修复它。tbh,代码中的更改可能会导致这种情况。@nomaD只需重写额外的代码即可。
/foo/bar
/foo//bar
是两条完全不同的路径
/foo/bar
将加载
foo
控制器的
bar()
方法/动作,
/foo//bar
将加载
foo
控制器的
索引('bar')
。@nomaD:这不仅仅是美观。请参阅我的编辑。您不想将
/foo/index
作为显式URL有什么原因吗?@nomaD:所以,实际上,您可能不想尝试这样做。:]但他说这确实有效。我猜他不可能在apache上,你们两个都是对的。我的设置确实有效,我正在使用一个全面重写:
RewriteRule^(.*)$index.php?$1[L]
,然后使用php解析url并找出要加载的内容。也许他正在分解
请求URI
,以分离参数,这是一个绝妙的见解。不过这很有道理。PHP不关心apache对双斜杠的看法。是的,我使用PHP将URL分解为
'/'
$segment[0]
是要加载的控制器,
segment[1]
是方法/操作(如果($segment[1]='')$segment[1]='index';,以下所有段都用作该方法的参数。因此
/blog//first-post
基本上会运行
$framework->blog->index('first-post')
,而
/blog/first-post
会运行
$framework->blog->first-post()
,这根本不起作用;)