0

我见过很多看起来像这样的 URI:

www.fakesite.net/stories/1234/man_invents_fire

我想知道 URI 的 /1234/man_invents_fire 部分是否实际上是目录,或者它们是否是 GET 参数(或其他东西)。我注意到很多时候 /man_invents_fire 段是不必要的(可以删除而不会产生任何后果),这让我相信 /1234/ 是数据库表中故事的 ID 号(或类似的东西)行)。

如果 URI 的这些部分是 GET 参数,是否有一种简单的方法可以实现这一点?如果他们不是,正在做什么?

(另外,我知道 CodeIgnitor 提供了这种功能,但我很想知道如果没有 CodeIgnitor 是否可以轻松实现它。但是,如果这与答案相关,我通常是 PHP)

谢谢

4

8 回答 8

2

最简单的做法是将所有内容路由到一个主 index.php 文件中,然后通过运行 $pieces = explode("/", $_SERVER['REQUEST_URI']); 找出您的路由。

安装/启用 mod_rewrite 后,确保在 apache 配置中未将允许覆盖设置为 false(以允许读取 .htaccess),然后将其放入 docroot 的 .htaccess 文件中。

<ifModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-s #Make sure the file doesn't actually exist (needed for not re-routing things like /images/header.jpg)
    RewriteRule .  /index.php  [L,QSA] #re-route everything into index.php
</IfModule>
于 2009-08-14T16:17:09.977 回答
0

As some background information in addition to the answers before me, a URL is just that - a 'Uniform Resource Locator'. Although in the old days, it often used to map 1:1 to a file/directory structure, all that is required in the HTTP spec is to identify a certain resource. Basically that means that, given a certain string, it should indicate a certain 'resource' on the server. In practice, in a HTTP environment this is usually implemented with a rewriting mechanism such as mod_rewrite. RFC's such as this one: http://www.ietf.org/rfc/rfc1738.txt give a nice, albeit abstract, overview. The concepts only come to life after designing and implementing some non-obvious uses, though.

于 2009-08-14T18:19:41.273 回答
0

那就是所谓的url重写,google一下,你会发现很多关于它的信息。

于 2009-08-14T16:02:58.990 回答
0

好吧,您假设1234main_invents_fire是参数是正确的。从 HTTP 协议描述它们的意义上来说,它们并不是真正的 GET 参数,但它们完成了相同的任务,同时保持 URL“友好”。这种技术被称为URL 重写,现在网络上充斥着这方面的信息。

这是一篇关于 PHP 中的友好 URL的文章,但我确信在谷歌上搜索该主题会产生更有用的结果。

于 2009-08-14T16:04:19.127 回答
0

在 PHP 中实现这一点通常是通过 .htaccess 文件并使用apache 的 mod_rewrite 模块完成的。

于 2009-08-14T16:04:58.923 回答
0

他们制作这样的网址,以便人们可以轻松地将其添加书签,并且可以在搜索中安全返回。

取决于你使用什么语言来解码它。在这种情况下,“故事”是主脚本,“1234”是 id,“man_invent_fires”是标题。

如果您使用的是 php,则可以使用 $_SERVER['PHP_SELF'] 或 $_SERVER['REQUEST_URI'] 变量对其进行解码。

如果您打算制作这样的网站,则必须牢记一定的安全性。在谷歌中查找它们,但要注意的关键之一是 sql 注入器。

于 2009-08-14T16:07:19.213 回答
0

就像 WordPress 中的永久链接一样,这通常是通过 Apache 的 mod_rewrite 完成的(如果不使用 Apache,则使用类似的方法);但是,您也可以使用 404 错误页面处理程序来实现相同的结果(但通常不建议这样做)。

通常,所有页面请求都被重定向到网关,该网关解析请求的 URI 以确定它是否符合指定的模式(在您的情况下可能是/{category}/{article_id}/{article_title})。从那里,网关通常可以只使用article_id来检索适当的内容。

取决于系统,category通常可以article_title丢弃/忽略,通常用于 SEO 价值;但是,在某些情况下,可能会以某种方式用于扩充(例如:确定要查询的数据库表等)。categoryarticle_id

MVC 和 Zend 一样,也使用类似的技术来确定其中要执行的控制器和方法。此类使用的示例格式是/{module}/{controller}/{method}; 但是,这是高度可定制的。

于 2009-08-14T16:03:19.487 回答
-1

如果您使用的是Symfony,那么您可以使用路由功能来执行此操作。

于 2009-08-14T16:04:04.930 回答