一尘不染

用PHP重写URL

php

我有一个网址,看起来像:

url.com/picture.php?id=51

我将如何将该URL转换为:

picture.php/Some-text-goes-here/51

我认为WordPress也是一样。

如何使用PHP创建友好的URL?


阅读 309

收藏
2020-05-26

共1个答案

一尘不染

您基本上可以通过以下两种方式执行此操作:

.htaccess路由与mod_rewrite

.htaccess在您的根文件夹中添加一个名为的文件,并添加以下内容:

RewriteEngine on
RewriteRule ^/?Some-text-goes-here/([0-9]+)$ /picture.php?id=$1

这将告诉Apache为该文件夹启用mod_rewrite,并且如果询问它与正则表达式匹配的URL,它将在 内部
将其重写为所需的内容,而最终用户看不到它。简单但不灵活,因此,如果您需要更多功能,请执行以下操作:

PHP路线

将以下内容放在您的.htaccess文件中:(请注意斜杠)

FallbackResource /index.php

这将告诉它为您index.php通常无法在您的站点中找到的所有文件运行。然后,您可以在其中例如:

$path = ltrim($_SERVER['REQUEST_URI'], '/');    // Trim leading slash(es)
$elements = explode('/', $path);                // Split path on slashes
if(empty($elements[0])) {                       // No path elements means home
    ShowHomepage();
} else switch(array_shift($elements))             // Pop off first item and switch
{
    case 'Some-text-goes-here':
        ShowPicture($elements); // passes rest of parameters to internal function
        break;
    case 'more':
        ...
    default:
        header('HTTP/1.1 404 Not Found');
        Show404Error();
}

这是大型站点和CMS系统执行此操作的方式,因为它在解析URL,配置和数据库相关的URL等方面提供了更大的灵活性。对于零星使用,使用硬编码的重写规则.htaccess会很好。

2020-05-26