URL重写重定向到一个文件
比方说,我有项目文件夹,如下所示:URL重写重定向到一个文件
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
我该怎么做?
这是从CakePHP拍摄。htacess重写规则:
<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/ * - >http://www.site.com/index.php?url= *
从这里你的index.php可以解析$ _GET [ '网址']
//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")
RewriteRule ^user/id/([0-9]+)$ index.php?page=user&id=$1
但它的声音对我说,你应该使用所谓的路由器,重定向所有TRAFIC到index.php ...
http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/(看看这个链接)
你的情况有使用/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']
来处理您梦寐以求的模式中的请求。
您是否使用Apache作为网络服务器?
如果是,您可以使用* mod_rewrite *来完成该操作。
我没有这样做我自己,所以我不能给你详细的说明,但与谷歌搜索使用像"mod_rewrite examples"
土地搜索字符串你很多看似不错的教程。
没有Apache重写规则,名为Slim的微框架可以为您的php项目制作路由和模板。你只能在index.php文件中定义你的路由。喜欢 ;
Slim::get('/', function() { Slim::render('index.template'); });
您将实施所谓的前端控制器模式。如果你Google,你会发现几个php的实现。我认为这个系列建立你自己的PHP框架是很好的。
http://fuelyourcoding.com/php-frameworks-just-roll-your-own-part-1/
是这个Windows或Linux? – Neal 2011-03-28 14:10:32
@Neal,我在Mac OS X上使用Xampp ...我猜在Apache上。 – Shoe 2011-03-28 14:11:36