Переписать строку запроса "? X = y" в стиле "/ x / y" - PullRequest
1 голос
/ 26 мая 2010

У меня есть PHP MVC фреймворк, который я построил с нуля, который использует традиционную domain.com/controller/action маршрутизацию URL. Хотя в настоящее время я выполняю приведенные ниже преобразования в маршрутизаторе, я хотел бы заменить их в URL по косметическим причинам.

Например:

controller/action?filter=bank

становится:

controller/action/filter/bank

Я немного поэкспериментировал с регулярным выражением, но, похоже, не могу найти соответствия. Я также не уверен, как переписать его, используя RewriteCond.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 26 мая 2010

Формат URL Zend Framework практически идентичен этому, и вот что они используют :

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 голосов
/ 22 декабря 2010

Исходя из вашего ответа на мой другой ответ, я предлагаю вам использовать JavaScript для обработки отправки формы фильтра и создания запроса «чистый URL» на стороне клиента.


EDIT

Я недавно реализовал это в моем средстве выбора года / месяца для моего календарного приложения. Он использует 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());
    });
});
...