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 

我该怎么做?

+1

是这个Windows或Linux? – Neal 2011-03-28 14:10:32

+0

@Neal,我在Mac OS X上使用Xampp ...我猜在Apache上。 – Shoe 2011-03-28 14:11:36

这是从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") 
+0

你可能想看看php的$ _SERVER ['PATH_INFO']变量! – Eduard7 2011-03-28 15:16:39

+1

'?url = $ 1'没有必要。您可以通过'$ _SERVER ['REQUEST_URI']'访问相同的信息 – vbence 2011-03-28 21:09:18

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/