繁体   English   中英

路由URL时使用index.php?q = path /而不是index.php / path /的优点/缺点?

[英]Pros/cons of using index.php?q=path/ instead of index.php/path/ when routing URLs?

我正在编写一个简单的方法来将路由映射到文件,并且遇到了两种方法。

我猜想大多数框架都使用第一个方法,即使用$ _SERVER ['REQUEST_URI']变量提取index.php之后的所有内容:

RewriteRule ^(.*)$ index.php [QSA,L]

第二种方法在Drupal中使用,并且该路由只是作为查询字符串传递。

RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]

现在,“ Drupal方式”对我来说似乎简单得多。 使用另一种方法,您必须在$ _SERVER ['REQUEST_URI']和$ _SERVER ['SCRIPT_NAME']上都使用“ explode”,然后使用array_diff_assoc之类的东西来删除脚本名称和子目录名称(如果有的话)。 这不是很多工作,但是如果使用Drupal方式可以简单地提取$ _GET ['q']值,为什么没有人这样做呢? 有什么不利条件?

谢谢。

使用q参数的缺点是,如果不重写URL,则URL看起来像...

http://domain.com/?q=something

与清洁剂(IMO)相对

http://domain.com/index.php/something

使用url进行重写的一种方法或另一种方法没有巨大的优点或缺点。 但是,我会指出包括最后斜杠在内的所有内容,并将其存储在_SERVER[PATH_INFO] ,因此不必解析请求URI。

之所以使用较短的URL技术,主要是因为它具有更清洁的技术和更好的SEO。 搜索引擎将这两个URL视为“相同”:

http://www.domain.com/?b=something

http://www.domain.com/?b=hello

我没有很好的解释,所以这里有一些链接,上面有一些非常好的信息:


现在,有些人以不同的方式实现了较短的URL,但这就是我发现它们最适合我的方式:

在.htaccess中

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

在index.php(或其他一些php文件)中

if(isset($_GET['route']) && $_GET['route'] != NULL && strlen($_GET['route']) > 0)
{
    $split = explode('/', $_GET['route']);
    for($i=1; $i <= count($split)-1; $i++)
    {
        $_GET[$i] = $split[$i];
    }
}

然后,您可以使用$ _GET ['1'](或$ _GET [1])以及所有后续数字。

URL如下所示:

http://www.domain.com/?b=something

变成

http://www.domain.com/something

http://www.domain.com/?b=something&a=hello&c=blah

变成

http://www.domain.com/something/hello/blah

然后可以通过以下方式访问参数:

$_GET[1] = "something";
$_GET[2] = "hello";
$_GET[3] = "blah";

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM