像Reddit,Facebook和Yahoo这样的网站如何制作如此简单的网址?

时间:2014-01-05 05:08:48

标签: php facebook url

例如,facebook如何为其设置页面创建其网址 “https://www.facebook.com/settings”以及Reddit如何制作这样的subreddit网址: http://www.reddit.com/r/askscience/

我正在网站上工作,我想将其整合到简单且用户友好的导航中。在PHP中执行此操作的最简单方法是什么?

3 个答案:

答案 0 :(得分:1)

有很多框架可以简化这一过程并为流程添加许多功能,但我会向您展示一个基本方法:

首先,您可以使用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

答案 1 :(得分:0)

你需要使用apache的mod_rewrite。

您可以在.htaccess规则中设置简单规则,该规则将网址中的每个网段映射到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

答案 2 :(得分:0)

你问的有些事情有点超出你通常用普通的'vanilla'PHP做的事情。

如果您使用的是框架,例如Code Igniter,您可以设置一个控制器来处理该URL,并收集您需要的任何数据并根据该数据加载您的视图。

您更有可能使用Apache url重写来实现此目的(如果您的网络服务器是Apache。如果没有,则Node.js或Google App Engine以及其他人都有类似的角色。)