URL重写重定向到单个文件

时间:2011-03-28 14:09:40

标签: php url-rewriting

假设我的项目文件夹如下:

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

我该怎么做?

6 个答案:

答案 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/