我有一个我从头开始构建的PHP MVC框架,它使用传统的domain.com/controller/action
URL路由。虽然我目前正在路由器中处理以下转换,但我还是想在网址中将其替换为外观。
例如:
controller/action?filter=bank
变为:
controller/action/filter/bank
我已经对正则表达式进行了一些实验,但似乎找不到匹配。我也不确定如何使用RewriteCond
重写它。
提前致谢。
答案 0 :(得分:0)
您应该查看clean-urls,mod-rewrite和.htaccess上的一些问题。
HTAccess - Confusing clean url's
答案 1 :(得分:0)
Zend Framework 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...
答案 2 :(得分: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());
});
});