用于静态链接页面的url mod_rewrite

时间:2012-11-04 14:24:25

标签: php url mod-rewrite

如何使用mod_rewrite实现此目的?

from:
.com/index.php?menu=home
to:
.com/home

from:
.com/index.php?menu=home&list=hello
to:
.com/home/hello

另外(没有文件夹hierarki)

from:
.com/index.php?menu=home&list=hello
to:
.com/hello

我正在使用它作为第一个:

 RewriteRule ^([^/\.]+)/?$ index.php?menu=$1 [L]

但如果有多个变量,如何连接它们?

试过这个:

RewriteRule ^([^/]*)/([^/]*)?$ index.php?home=$1&list=$2

2 个答案:

答案 0 :(得分:1)

您误解了应该如何重写URL。当您使用MVC模式时,您的URL会告诉框架/引导程序执行哪个控制器和方法。 因此,您的网址应该类似于:http://host.com/CONTROLLER/ACTION/what/ever。这就是为什么你不能将.com/index.php?menu=home&list=hello重写为.com/hello。当http://host.com/hellocontroller时,以及它是action(控制器类的方法)时,将无法区分。

以下代码将重写:

  1. .com/whatever.com/index.php?menu=whatever
  2. .com/whatever/youwant.com/index.php?menu=whatever&list=youwant
  3. .com/whatever/youwant/with/additional/parameters.com/index.php?menu=whatever&list=youwant&additional=$5
  4. RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]*)([/])?([^/]*)?([/])?(.*)$ index.php?menu=$1&list=$3&additional=$5 [L,QSA]
    

答案 1 :(得分:0)

很多令人头疼的问题,为什么不创建 1 规则并将路由传递给您的脚本,然后使用explode()来拆分和定义:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

然后在你的PHP中

<?php 
$route = explode('/',$_GET['route']);

$menu = (!empty($route[0])?:null);
$list = (!empty($route[1])?:null);
?>

BTW你的第三个例子是不可能的。