我看过很多看起来像这样的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,如果这与答案相关)< / p>
由于
答案 0 :(得分:2)
最简单的方法是将所有内容路由到主index.php文件中并通过运行$ pieces = explode(“/”,$ _SERVER ['REQUEST_URI'])从那里找出路由;
安装/启用mod_rewrite后,确保apache配置中的allow override未设置为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>
答案 1 :(得分:0)
这就是所谓的url重写,google for it,你会发现很多关于它的信息。
答案 2 :(得分:0)
就像WordPress中的固定链接一样,这通常是通过Apache的mod_rewrite(或者如果不使用Apache的话等效)完成的;但是,您也可以使用404错误页面处理程序来实现相同的结果(但通常不建议这样做。)
通常,所有页面请求都会重定向到网关,该网关会解析所请求的URI,以确定它是否符合指定的模式(在您的情况下可能是/{category}/{article_id}/{article_title}
)。从那里,网关通常只能使用article_id
来检索适当的内容。
根据系统的不同,category
和article_title
category
可能会以某种方式用于增加article_id
(例如:确定要查询的数据库表等)。
像Zend一样,MVC也使用类似的技术来确定执行哪个控制器和方法。此类用法的示例格式为/{module}/{controller}/{method}
;但是,这是高度可定制的。
答案 3 :(得分:0)
嗯,你认为 1234 和 main_invents_fire 是参数是正确的。在HTTP协议描述它们的意义上,它们不是真正的GET参数,但它们完成相同的任务,同时保持URL“友好”。这项技术被称为URL rewriting,这些天网上充满了信息......
这是一个article about friendly URLs in PHP,但我确信谷歌搜索该主题将提供更有用的结果。
答案 4 :(得分:0)
在PHP中实现此操作通常是通过.htaccess文件并使用apache's mod_rewrite module完成的。
答案 5 :(得分:0)
他们制作这样的网址,以便人们可以轻松地为其添加书签,并且可以在搜索中安全返回。
取决于您使用何种语言对其进行解码。在这种情况下,它显示“stories”是主脚本,“1234”是id,“man_invent_fires”是标题。
如果您使用的是php,可以使用$ _SERVER ['PHP_SELF']或$ _SERVER ['REQUEST_URI']变量对其进行解码。
如果您打算建立这样的网站,必须牢记一定的安全性。在google中查找它们,但要注意的关键是sql注入器。
答案 6 :(得分:0)
除了我之前的答案之外,作为一些背景信息,URL就是 - “统一资源定位器”。虽然在过去,它经常用于将1:1映射到文件/目录结构,但HTTP规范中所需的全部内容都是标识某个资源。基本上这意味着,给定一个字符串,它应该指示服务器上的某个“资源”。实际上,在HTTP环境中,这通常使用诸如mod_rewrite之类的重写机制来实现。像这样的RFC:http://www.ietf.org/rfc/rfc1738.txt给出了一个很好的,尽管是抽象的概述。但是,在设计和实现一些非显而易见的用途之后,这些概念才会生效。
答案 7 :(得分:-1)
如果您使用Symfony,则可以使用routing feature执行此操作。