PHP 框架中的漂亮 URL [英] Pretty URLs in PHP frameworks

查看:21
本文介绍了PHP 框架中的漂亮 URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道您可以在 htaccess 中添加规则,但我发现 PHP 框架不会这样做,而且不知何故您仍然拥有漂亮的 URL.如果服务器不知道 URL 规则,他们怎么做?

I know that you can add rules in htaccess, but I see that PHP frameworks don't do that and somehow you still have pretty URLs. How do they do that if the server is not aware of the URL rules?

我一直在寻找 Yii 的 url manager class 但我不明白它是怎么回事做到了.

I've been looking Yii's url manager class but I don't understand how it does it.

推荐答案

这通常是通过使用如下规则将所有请求路由到单个入口点(根据请求执行不同代码的文件)来完成的:

This is usually done by routing all requests to a single entry point (a file that executes different code based on the request) with a rule like:

# Redirect everything that doesn't match a directory or file to index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L]

此文件然后将请求 ($_SERVER["REQUEST_URI"]) 与路由列表进行比较 - 将请求匹配到控制器操作(在 MVC 应用程序中)或其他模式的映射执行路径.框架通常包含一个路由,可以从请求本身推断控制器和操作,作为备用路由.

This file then compares the request ($_SERVER["REQUEST_URI"]) against a list of routes - a mapping of a pattern matching the request to a controller action (in MVC applications) or another path of execution. Frameworks often include a route that can infer the controller and action from the request itself, as a backup route.

一个简单的小例子:

<?php

// Define a couple of simple actions
class Home {
    public function GET() { return 'Homepage'; }
}

class About {
    public function GET() { return 'About page'; }
}

// Mapping of request pattern (URL) to action classes (above)
$routes = array(
    '/' => 'Home',
    '/about' => 'About'
);

// Match the request to a route (find the first matching URL in routes)
$request = '/' . trim($_SERVER['REQUEST_URI'], '/');
$route = null;
foreach ($routes as $pattern => $class) {
    if ($pattern == $request) {
        $route = $class;
        break;
    }
}

// If no route matched, or class for route not found (404)
if (is_null($route) || !class_exists($route)) {
    header('HTTP/1.1 404 Not Found');
    echo 'Page not found';
    exit(1);
}

// If method not found in action class, send a 405 (e.g. Home::POST())
if (!method_exists($route, $_SERVER["REQUEST_METHOD"])) {
    header('HTTP/1.1 405 Method not allowed');
    echo 'Method not allowed';
    exit(1);
}

// Otherwise, return the result of the action
$action = new $route;
$result = call_user_func(array($action, $_SERVER["REQUEST_METHOD"]));
echo $result;

结合第一个配置,这是一个简单的脚本,允许您使用像 domain.com/about 这样的 URL.希望这能帮助您了解这里发生的事情.

Combined with the first configuration, this is a simple script that will allow you to use URLs like domain.com/about. Hope this helps you make sense of what's going on here.

这篇关于PHP 框架中的漂亮 URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆