假设我的项目文件夹如下:
folder/models
folder/view
folder/controls
folder/public
folder/library
现在假设站点文件夹是folder/public/
,在该文件夹中只有一个名为index.php
的文件。此文件通过GET参数index.php?page=user
处理所有网站页面请求,例如,将在另一个文件夹中调用该应用程序的user.php文件。关键是我想要一个URL,如:
www.site.com/index.php?page=user&id=1
成了
www.site.com/user/id/1
我该怎么做?
答案 0 :(得分:2)
这取自CakePHP .htaccess rewriterule:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
它将呈现您主机下的所有内容 http://www.site.com/ * - &gt; http://www.site.com/index.php?url= *
从这里你的index.php可以解析$ _GET ['url']
//e.g browser requests www.site.com/user/id/1
$url = $_GET['url']; // user/id/1
$params = explode("/",$url); // array(0=>"user",1=>"id",2=>"1")
答案 1 :(得分:1)
RewriteRule ^user/id/([0-9]+)$ index.php?page=user&id=$1
但是听起来我应该使用所谓的路由器,将所有流量重定向到index.php ......
http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/(查看此链接)
答案 2 :(得分:0)
在你的情况下,使用/id/
是没有意义的,但是你去了:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/id/(.*) index.php?page=$1&id=$2
或者更好的方法是什么:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php
然后通过检查index.php
与您梦寐以求的模式来处理$_SERVER['REQUEST_URI']
文件中的请求。
答案 3 :(得分:0)
您使用 Apache 作为网络服务器吗?
如果是,您可以使用* mod_rewrite *来实现这一目标。
我自己没有这样做,所以我不能给你详细的说明,但是用 google 进行搜索,使用像"mod_rewrite examples"
这样的搜索字符串给你看了很多看似很好的教程
答案 4 :(得分:0)
如果没有apache重写规则,名为Slim的微框架可以为您的php项目进行路由和模板化。您只能在index.php文件中定义路由。喜欢;
Slim::get('/', function () { Slim::render('index.template'); });
答案 5 :(得分:0)
您将实现所谓的前端控制器模式。如果你谷歌,你会发现几个PHP实现。我认为这个关于构建自己的php框架的系列很好。
http://fuelyourcoding.com/php-frameworks-just-roll-your-own-part-1/