0

如何使用 mod_rewrite 实现这一点?

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

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

ALSO(没有文件夹 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
4

2 回答 2

1

您误解了应该如何进行 URL 重写。当您使用该MVC模式时,您的 URL 会告诉框架/引导程序要执行哪个控制器和方法。因此,您的 URL 应该类似于:http://host.com/CONTROLLER/ACTION/what/ever. 这就是为什么你不能.com/index.php?menu=home&list=hello重写为.com/hello. 没有办法区分什么时候http://host.com/hello是 a什么时候是controller一个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.

.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)([/])?([^/]*)?([/])?(.*)$ index.php?menu=$1&list=$3&additional=$5 [L,QSA]
于 2012-11-04T16:59:14.473 回答
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);
?>

顺便说一句,你的第三个例子是不可能的。

于 2012-11-04T14:36:36.667 回答