2010-05-26 48 views
1

我有一个从头构建的PHP MVC框架,它使用传统的domain.com/controller/action URL路由。虽然我目前正在处理路由器中的下面的转换,但我想在URL中替换它们以达到美观的目的。将查询字符串“?x = y”样式重写为“/ x/y”样式

例如:

controller/action?filter=bank 

变为:

controller/action/filter/bank 

我已经做了一些实验用正则表达式,但似乎无法找到匹配。我也不确定如何使用RewriteCond来重写它。

在此先感谢。

+0

您是否看过IPS如何在IP.Board产品中执行此操作?如果您可以访问IPB ftp,请查看他们的代码。他们也不使用.htaccess。 – Zack 2010-05-26 19:24:35

+0

我的回答有帮助吗?你需要额外的东西吗? – Sonny 2010-05-27 13:35:21

回答

0

Zend框架URL格式几乎相同,这一点,和here's what they use

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

如果你的服务器端脚本是PHP,你可以用这个来抓取url部分:

$request_parts = explode('/', $_SERVER['REQUEST_URI']); 
$controller = $request_parts[0]; 
$action = $request_parts[1]; 
// etc... 
+0

将所有内容重定向到index.php,这就是我正在做的。我正在寻找的是一种在GET表单发送后重新格式化URL的方法,创建“?x == y&z = 1”样式。我认为这可能是可行的在PHP配置。 – Ross 2010-05-31 10:29:19

+0

我了解使内部URL变得干净的原因,但是对GET请求重定向仅仅是为了清理URL似乎很奇怪。 – Sonny 2010-05-31 17:58:31

0

根据您对我的其他答案的回应,我建议您使用JavaScript来处理过滤器表单提交并在客户端创建“干净网址”请求。


编辑

最近我实现了这个在我的年/月选择我的日历应用程序。它使用jQuery/JavaScript来检测表单中的更改并写入“干净”URL:

$(document).ready(function() { 
    $('form.jumpform select').change(function() { 
     $form = $(this).closest('form'); 
     window.location = $form.attr('action') 
       + '/y/' + encodeURIComponent($form.find('select[name="y"]').val()) 
       + '/m/' + encodeURIComponent($form.find('select[name="m"]').val()); 
    }); 
});