这是一个双重问题:正确答案将转到“您如何在 PHP 中做到这一点”,解释是否有任何优势,如果可能的话也很重要。
我只是好奇,因为我真的不知道,我在网页上看到了很多。
编辑:我不知道技术名称,但例如在 Stackoverflow 上:“ http://stackoverflow.com/posts/edit/522452
”是我所说的“文件夹”(以前在问题标题中使用的术语)。
这是一个双重问题:正确答案将转到“您如何在 PHP 中做到这一点”,解释是否有任何优势,如果可能的话也很重要。
我只是好奇,因为我真的不知道,我在网页上看到了很多。
编辑:我不知道技术名称,但例如在 Stackoverflow 上:“ http://stackoverflow.com/posts/edit/522452
”是我所说的“文件夹”(以前在问题标题中使用的术语)。
如果您指的是/posts/edit/522452
-style URLs 而不是/posts.asp?action=edit&postid=522452
-style URLs(或它在后端转换为的任何内容),这通常是通过 URL 重写器完成的,例如mod_rewrite
. 该 URL 的规则可能如下所示:
RewriteRule ^/posts/(\w+)/(\d+) /posts.asp?action=\1&postid=\2
这种 URL 的两个主要优点是:
在 PHP 中,您可以通过$_GET['action']
和访问这些选项$_GET['postid']
,就像浏览器要求重写表单一样。
要使用此类 URL,您必须执行三个步骤:
告诉您网络服务器,这些请求应该重定向到您的 PHP 脚本。使用 Apache,您可以使用mod_rewrite 模块来执行此操作:
重写引擎开启 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !^index\.php$ index.php [L]
该指令将每个与文件系统中的文件不匹配的请求重定向到index.php
.
获取您的脚本来解析这些 URL:
$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); $segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/')); var_dump($segments);
这可能是解析 URL 路径并获取每个路径段的最简单方法。
在您的输出中使用此 URL。(琐碎的)
正如其他人指出的那样,出于 SEO 目的、缓存和可读性的一部分,我想补充一点,文件夹样式的参数也是用户“玩弄”参数的动力。例如,在 Stackoverflow 上,当按标签过滤时,通常很想手动编辑 url,而不是寻找合适的按钮并单击它。
优点是可读性和可能在搜索引擎中更好的位置。
mod_rewrite
如果您使用的是 Apache,您可以通过以下方式实现此目的。在 PHP 中,您还可以查看预定义的全局变量 - 我认为$_SERVER['REQUEST_URI']
可行,但可能会有更好的全局变量。
在不重写的情况下使用纯 PHP 时,.php
如果您适当地配置您的服务器,您也可以从脚本的文件名中删除 ,因此仍然可以获得“不错的”URL。
有几个原因,但主要是:
搜索引擎优化的目的。搜索引擎通常会忽略“?”之后的任何内容。问号符号,从而使您无法索引页面,或者更糟糕的是,根本没有索引。
可读性:
www.somesite.com/products/devices/keyboards/20,asc
www.somesite.com/products/devices/keyboards/20,asc.html
看起来比:
www.somesite.com?show=products&cat=devices&sub_cat=keyboards&sort=asc&items=20
缓存。
有关如何在 Apache 中执行此操作的信息: http ://httpd.apache.org/docs/2.0/misc/rewriteguide.html