【问题标题】:Simple MVC mod-rewrite简单的 MVC 模式重写
【发布时间】:2009-06-14 02:01:13
【问题描述】:

我不确定如何为模块化 MVC 结构进行 mod-rewrite。我想要发生的是 URL 捕获:

@987654321@{model}&view={view}&parameters={parameters}

注意:参数将按特定顺序排列并由管道分隔(除非有更好的方法): 参数=param1|param2|param3

@987654322@{model}/{view}/{parameters}

例子:

@987654323@

另一个例子:

@987654324@{sort}/{page}/{search} @987654325@

基本上模型和视图之后的任何东西都可以是参数;尽可能多的。对于每个视图,我都会知道该区域允许的可能参数以及顺序。

提前谢谢你。

--

使用下面的代码是我所拥有的:

重写引擎开启 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)/(.*) index.php?model=$1&view=$2&parameters=$3 [L,NS]

网址:@987654326@
PHP $_GET 变量:

大批 ( [模型] => 常见问题/索引/asc [查看] => 5 [参数] => 如何 )

应该是:

大批 ( [型号] => 常见问题 [视图] => 索引 [参数] => asc/5/如何 )

请帮忙

【问题讨论】:

  • (.*) 是贪婪的(即它们尽可能地扩展)。在这种情况下,前两个必须使用 (.*?)。它为您提供 RewriteRule ^(.*?)/(.*?)/(.*)$ index.php?model=$1&view=$2&parameters=$3 [L,NS]

标签: model-view-controller mod-rewrite


【解决方案1】:

您可以使用 PHP 函数来执行此操作。快速,没有默认值或错误处理:

list( $controller, $function, $params ) = explode( '/', $uri, 3 );
$params = explode( '/', $uri );

在 .htaccess 中,将任何不存在的查询重定向到您的 PHP 查询处理文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ mvc.php [L,NS]

但请注意过滤您的输入,不要包含任何文件等。

【讨论】:

    【解决方案2】:

    你也可以像这样拥有你的 htaccess:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/(.*)/(.*) mvc.php?model=$1&view=$2&parameters=$3 [L,NS]
    

    这只是另一种方式,虽然我个人更喜欢 streetpc 的方式。

    【讨论】:

    • 嘿,谢谢你这么快回复我。我编辑了我的问题以包含我根据您提供给我的内容修改的测试代码。差不多了,只是需要一些调整。谢谢。
    猜你喜欢
    • 2011-10-28
    • 1970-01-01
    • 2014-01-23
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2017-07-19
    • 2015-01-20
    相关资源
    最近更新 更多