Mod_Rewrite превращает пары значений GET в красивые косые черты - PullRequest
0 голосов
/ 16 февраля 2010

У меня есть URL http://domain.com/module/controller/action/get1/value1/?get2=value2&get3=value3 Я хочу использовать Mod_Rewrite, чтобы изменить ?&= на соответствующие / косые черты в строке с первой переменной GET.

Мне также нужно избегать конфликтов с моими текущими правилами Mod_Rewrite:

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

Ответы [ 3 ]

0 голосов
/ 16 февраля 2010

Попробуйте поставить эти правила перед собой:

RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)&(.+)
RewriteRule ^ %{REQUEST_URI}%1/%2/?%3 [N]
RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)$
RewriteRule ^ %{REQUEST_URI}%1/%2/? [L,R]
0 голосов
/ 20 февраля 2010

Я не мог найти хороший способ сделать это ... поэтому я решил написать минимизированный код PHP в верхней части моего zend.php.

list($sURL, $sQuery) = explode('?', $_SERVER['REQUEST_URI']);
$sOriginalURL = $sURL;
if ('/' !== substr($sURL, -1)) $sURL .= '/';
if (isset($sQuery)) {
    foreach (explode('&', $sQuery) as $sPair) {
        if (empty($sPair)) continue;
        list($sKey, $sValue) = explode('=', $sPair);
        $sURL .= $sKey . '/' . $sValue . '/';
    }
}
if (isset($sQuery) || $sOriginalURL !== $sURL) header(sprintf('Location: %s', $sURL));

Если кто-то может улучшить это, пожалуйста, прокомментируйте ниже.

0 голосов
/ 16 февраля 2010

Если вам не нужны параметры GET в их собственном контейнере $_GET, вы можете оставить файл htaccess как есть, и фронт-контроллер (я полагаю, вы используете PHP) выполняет синтаксический анализ, а не mod_rewrite.

Вы должны получить доступ к $_SERVER["REQUEST_URI"] и проанализировать параметры, прежде чем начнется любой другой анализ URL (я думаю, что вы используете Zend Frameworks ').

Это работает, только если вы можете изменить часть вашей программы, которая нуждается в value1 value2 value3 и т. Д. Если какой-то компонент Zend нуждается в параметрах, и этот компонент извлекает их непосредственно из $_GET, это не будет работать для вас, и вам, возможно, придется составить mod_rewrite инструкции.

Кстати, вам известно, что при использовании метода в вашем .htaccess недействительные ссылки на изображения, файлы CSS и другие типы мультимедиа будут перенаправлены на zend.php?

...