Php 像Reddit、Facebook和Yahoo这样的网站是如何制作如此简单的URL的?
例如,facebook如何为他们的设置页面创建url “”Reddit如何使子Reddit URL如下:Php 像Reddit、Facebook和Yahoo这样的网站是如何制作如此简单的URL的?,php,facebook,url,Php,Facebook,Url,例如,facebook如何为他们的设置页面创建url “”Reddit如何使子Reddit URL如下: 我在一个网站上工作,我想结合这个简单和用户友好的导航。在PHP中,最简单的方法是什么?有很多框架可以简化这一过程并为过程添加很多功能,但我将向您展示一种基本方法: 首先,您可以使用htaccess将所有请求路由到一个文件: //.htaccess - route all requests through index.php //don't route the request if the
我在一个网站上工作,我想结合这个简单和用户友好的导航。在PHP中,最简单的方法是什么?有很多框架可以简化这一过程并为过程添加很多功能,但我将向您展示一种基本方法: 首先,您可以使用
htaccess
将所有请求路由到一个文件:
//.htaccess - route all requests through index.php
//don't route the request if the url is for a file or directory
RewriteCond %{REQUEST_URI} !\.(png|jpe?g|gif|css|js|html)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
//all requests are sent to the file "index.php"
RewriteRule ^.*$ index.php [L]
然后,您可以使用php解析请求url并相应地响应它:
$pieces = preg_split('-/-', $_SERVER['REQUEST_URI'], NULL, PREG_SPLIT_NO_EMPTY);
$page = $pieces[0];
include "pages/{$page}.php";
显然,这只是一个非常基本的例子。其结果将是:
//site.com/some-place
include "pages/some-place.php
您需要使用apache的mod_重写 您可以在.htaccess规则中设置简单的规则,该规则将url中的每个段映射到php中的特定GET变量 下面是一个例子:
RewriteEngine on
RewriteBase /
RewriteRule ^([\ A-Za-z0-9-_,]+)/?$ /index\.php?mode=$1 [NC,L]
RewriteRule ^([\ A-Za-z0-9-_,]+)/([\ A-Za-z0-9-_,]+)/?$ /index\.php?mode=$1&slug=$2 [NC,L]
这将使url/p/home映射到index.php?mode=p&slug=home您所询问的一些事情超出了您通常使用普通的“香草”php所做的事情 如果您使用的是一个框架,比如CodeIgniter,那么您将设置一个控制器来处理该URL,并收集您需要的任何数据,并基于此加载视图
您更可能使用Apache url重写来实现这一点(如果您的Web服务器是Apache,则Node.js或Google App Engine以及其他应用程序都有类似的角色)。很抱歉,我在理解这一点时遇到了困难。第一个是有道理的,但是你能解释一下第二个吗piece@user2554352如果我复制并粘贴到index.php文件中,那么第一部分会将所有请求重定向到index.phpfile@user2554352不,那是htaccess。您需要使用
index.php
在根目录中创建一个名为.htaccess
的文件,并将该代码添加到其中。您还需要在htaccess
文件的开头打开RewriteEnginehtaccess
是一个Apache服务器模块,而不是php。使用htaccess路由很多东西并不理想。它应该只用于将所有请求路由到一个文件,然后让php进行路由。为什么不理想?它是轻量级的,并且易于编写、理解和使用,这正是OP所需要的,因为他们是一个初学者.htaccess
以性能差著称。这也是一种更混乱/不太灵活/不太强大的方法。@m59当我说轻量级时,我的意思是在新手程序员的末尾,也就是简单地设置SEF URL,而不修改程序的其余部分以在路由器周围运行,这是一种重量更轻的解决方案,而且在性能方面,这在很大程度上是一个遗留问题,只要您没有在数百个目录中运行.htaccess文件,性能影响就可以忽略不计。。。你有你的榜样。我将把决定权留给OP。reddit不在webpy上运行吗?编辑:一点研究表明reddit在挂架上运行不管怎样,m59在正确的轨道上可能重复