Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 像Reddit、Facebook和Yahoo这样的网站是如何制作如此简单的URL的?_Php_Facebook_Url - Fatal编程技术网

Php 像Reddit、Facebook和Yahoo这样的网站是如何制作如此简单的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

例如,facebook如何为他们的设置页面创建url “”Reddit如何使子Reddit URL如下:


我在一个网站上工作,我想结合这个简单和用户友好的导航。在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
文件的开头打开
RewriteEngine
htaccess
是一个Apache服务器模块,而不是php。使用htaccess路由很多东西并不理想。它应该只用于将所有请求路由到一个文件,然后让php进行路由。为什么不理想?它是轻量级的,并且易于编写、理解和使用,这正是OP所需要的,因为他们是一个初学者
.htaccess
以性能差著称。这也是一种更混乱/不太灵活/不太强大的方法。@m59当我说轻量级时,我的意思是在新手程序员的末尾,也就是简单地设置SEF URL,而不修改程序的其余部分以在路由器周围运行,这是一种重量更轻的解决方案,而且在性能方面,这在很大程度上是一个遗留问题,只要您没有在数百个目录中运行.htaccess文件,性能影响就可以忽略不计。。。你有你的榜样。我将把决定权留给OP。reddit不在webpy上运行吗?编辑:一点研究表明reddit在挂架上运行不管怎样,m59在正确的轨道上可能重复