URL重写 - 查询字符串

时间:2012-06-30 04:15:58

标签: apache .htaccess mod-rewrite query-string

我在MVC应用程序上工作,我的网址格式如下:

http://127.0.0.1/PDO/PARTIE%20III/index.php?rt=index/connexion
http://127.0.0.1/PDO/PARTIE%20III/index.php?rt=index/nouveauMsg

我正在寻求重写网址,使其显示为:

http://127.0.0.1/PDO/PARTIE%20III/index/connexion
http://127.0.0.1/PDO/PARTIE%20III/index/nouveauMsg

有没有人有任何建议可以帮我完成这个url_rewrite?

这是解析URL并加载正确视图和/或操作的路由器类

<?php

class router {
 /*
 * @the registry
 */
 private $registry;

 /*
 * @the controller path
 */
 private $path;

 private $args = array();

 public $file;

 public $controller;

 public $action; 

 function __construct($registry) {
    $this->registry = $registry;
 }

 /**
 *
 * @set controller directory path
 *
 * @param string $path
 *
 * @return void
 *
 */
 function setPath($path) {

/*** check if path i sa directory ***/
if (is_dir($path) == false)
{
    throw new Exception ('Invalid controller path: `' . $path . '`');
}
/*** set the path ***/
$this->path = $path;
}


 /**
 *
 * @load the controller
 *
 * @access public
 *
 * @return void
 *
 */
 public function loader()
 {
/*** check the route ***/
$this->getController();

/*** if the file is not there diaf ***/
if (is_readable($this->file) == false)
{
    $this->file = $this->path.'/error404.php';
            $this->controller = 'error404';
}

/*** include the controller ***/
include $this->file;

/*** a new controller class instance ***/
$class = $this->controller . 'Controller';
$controller = new $class($this->registry);

/*** check if the action is callable ***/
if (is_callable(array($controller, $this->action)) == false)
{
    $action = 'index';
}
else
{
    $action = $this->action;
}
/*** run the action ***/
$controller->$action();
 }


 /**
 *
 * @get the controller
 *
 * @access private
 *
 * @return void
 *
*/
private function getController() {

/*** get the route from the url ***/
$route = (empty($_GET['rt'])) ? '' : $_GET['rt'];

if (empty($route))
{
    $route = 'index';
}
else
{
    /*** get the parts of the route ***/
    $parts = explode('/', $route);
    $this->controller = $parts[0];
    if(isset( $parts[1]))
    {
        $this->action = $parts[1];
    }
}

if (empty($this->controller))
{
    $this->controller = 'index';
}

/*** Get action ***/
if (empty($this->action))
{
    $this->action = 'index';
}

/*** set the file path ***/
$this->file = $this->path .'/'. $this->controller . 'Controller.php';
}


}

&GT;

1 个答案:

答案 0 :(得分:1)

在文档根目录或Apache配置文件中的.htaccess中使用此重写规则:

RewriteEngine On
RewriteRule ^PDO/PARTIE%20III/(.*)$ PDO/PARTIE%20III/index.php?rt=$1 [L]

您可以在Martin Melin's site轻松测试重写规则。

有关详细信息:Apache's mod_rewrite module