我正在开发一个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'之类的网址,则会指向'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.
}
?>
<?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.
}
?>
答案 0 :(得分: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
答案 1 :(得分:0)
使所有非文件的请求都通过index.php。制作一个Router.php - 在index.php中要求它 - 在Router.php中解析请求并包含你需要的文件。
在你的Router.php中,你至少需要知道在uri中寻找的模式。尝试以某种形式的XML映射此模式,任何无法与您的模式匹配的内容都应该转到404页面。
抱歉,模糊......但这是一个很大的问题。有人可以详细说明它。