【问题标题】:URLs with /12 instead of ?var=12 [duplicate]带有 /12 而不是 ?var=12 的 URL [重复]
【发布时间】:2012-08-14 10:29:54
【问题描述】:

可能重复:
How to: URL re-writing in PHP?
Rewriting an arbitrary number of path segments to query parameters

目前,在我的网站 (source world gaming) 上,我使用 $_GET 方法来显示评论/新闻文章。例如,“sourceworldgaming.com/reviews.php?id=40”将在数据库中显示评论 #40。

IGN 不这样做。例如,他们使用 http://www.ign.com/games/guild-wars-2/pc-896298 - 不需要 $_GET[]。这是怎么做到的?他们是否为每个单独的游戏创建索引?

我希望能够使 URL sourceworldgaming.com/reviews.php/40

另外,这样做会使我的网站对搜索引擎更友好吗?谢谢。

【问题讨论】:

  • 不确定他们是怎么做的,但总的来说,mod_rewrite (or similar) 是你的朋友。
  • @mario dup 这里有很多问题。一点提示他们被称为漂亮URL的OP

标签: php html url-rewriting


【解决方案1】:

通过 mod_rewrite 和脚本的路由器部分完成:

网址:http://www.example.com/games/guild-wars-2/pc-896298

实际上是像这样传递给脚本的:

http://www.example.com/?route=/games/guild-wars-2/pc-896298

通过使用 mod_rewrite(示例)

RewriteEngine On
Options -Indexes
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

然后基本上/games/guild-wars-2/pc-896298 被分成几块使用

$route = explode('/',$_GET['route'])

所以$route[0] 将是控制器或查询类别。 $route[1] 将是动作或查询游戏,因为 $route[0] 是游戏类别等

【讨论】:

    【解决方案2】:

    /foo.php 的请求会转到您服务器上名为foo.php 的文件,这只是一个实现细节。 Web 没有什么需要这样做的,这只是很多系统都会做的事情,包括 PHP。许多其他系统使用不同的约定,例如路由表或对象遍历。

    如果您已经构建了一个使用文件系统来路由请求的网站,那么获取不同 URL 的最简单方法是在您使用的任何网络服务器软件上使用 mod_rewrite 或其等效软件。

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多