0

我正在开发一个 php 应用程序,它将使用与 MVC 系统相同的主体,但是,我不想使用类。我想要完成的是拥有 SEO URL(mysite.com/product/Some-Cool-Product/123)而不需要类。这些方法将改为使用函数。我遇到的最大问题是将 URI 映射到适当的文件和函数。例如,mysite.com/members/profile/123 将指向文件“sources/members.php”,然后调用“profile”函数。导致问题的原因是添加了为我的源文件使用目录的能力。如果我想使用诸如 'mysite.com/forums/threads/view/12345' 之类的 url,将指向 'sources/forums/threads.php 并以 id 作为参数调用'view' 函数。

有人可以帮我解决这个问题吗?这是我到目前为止所拥有的。

<?php 

$uri = $_SERVER['REQUEST_URI'];

$uri = ltrim($uri, '/');

$uri_segments = explode('/', $uri);

$invalid = 0;

foreach($uri_segments as $key => $val){

    if(!preg_match('^[a-z0-9]^', $val)){

        $invalid = $invalid + 1;

    }

}

if($invalid > 0){

    die('Could not execute the script... the uri contains invalid characters.');

} else {

    //Load the script.

}

?>

4

2 回答 2

1

我将假设您在此处使用 LAMP 堆栈(Linux/Apache/MySQL/PHP)。

如果您使用 Apache 作为 Web 服务器,您可以在您的公共目录中设置一个 .htaccess 文件,并使用重写规则自动为您执行此操作。所以当有人打的时候:

http://www.mysite.com/forums/threads/view/12345

它会自动加载“sources/members.php”并从 URL 中传递 id 作为 get 参数,该参数将显示在 $_GET 数组中。

在您的索引 (index.html/index.php) 文件所在的目录中,创建一个名为“.htaccess”的文件

您的.htaccess文件的一个示例是:

    RewriteEngine On
    RewriteRule ^forums/threads/view/([0-9]+) sources/members.php?thread_id=$1

如果这不起作用,可能是因为您的 Apache 配置配置错误或重写规则格式错误。无论哪种方式,这都比使用 PHP 快得多,不仅在代码编写方面而且在性能方面也是如此。

这里有一个可能有帮助的外部资源:http: //corz.org/serv/tricks/htaccess2.php

于 2013-01-29T02:52:20.217 回答
0

使所有不是文件的请求都通过 index.php。制作一个Router.php - 在index.php 中需要它 - 在Router.php 中解析请求并从那里包含您需要的文件。

在您的 Router.php 中,您至少需要知道要在 uri 中查找的模式。尝试以某种形式的 XML 映射此模式,任何无法与您的模式匹配的内容都应该转到 404 页面。

对不起,含糊不清..但这是一个大问题。有人可以详细说明它很长一段时间。

于 2013-01-29T02:39:15.987 回答