2011-02-07 2 views
0

Я следующий URLHtaccess правила переписывания

http://domain/phpfile.php/something1-param1/something2-param2/somethin3-param3

Могу ли я переписать его с Htaccess для

http://domain/phpfile.php?something1=param1&something2=para2&something3=param3

также PARAMS динамичны, они могут быть 1,2,3 или 4

+2

почему вы не просто переписать его г = something1-param1/something2-param2/somethin3-Param3, а затем использовать PHP, чтобы изменить это в something1 = param1 и т.д. – Jason

+0

является его опечатка, что ваша вторая ссылка имеет «para2» вместо «param2», или это преднамеренно? – Nanne

ответ

1

Вы можете использовать это простое решение

RewriteEngine On 
RewriteRule ^phpfile.php(.*)/([^/-]+)-([^/]*)/?$ phpfile.php$1?$2=$3 [QSA] 

Он будет работать с таким количеством Params, как вам нравится.

Пример: phpfile.php/name-walter/age-30 становится phpfile.php?name=walter&age=30

+0

Ницца, правило рекурсивно себя и добавляет каждый набор параметров в строку запроса, когда она идет? (соответствует последнему набору и работает назад?) – Leigh

+0

Да, точно. Самое замечательное, что RewriteRule соответствует только части имени файла. Каждый раз, когда правило сопоставляется, он удаляет один параметр из имени файла и добавляет его в строку запроса ... это повторяется до тех пор, пока не будет больше параметров. –

1

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

Вы можете использовать что-то вроде этого RewriteRule ^phpfile.php/(.*)$ phpfile.php?params=$1 (непроверенных), а затем в файле PHP просто вручную разобрать строку запроса, как это:

<?php 
    #$_GET['params'] = 'something1-param1/something2-param2/somethin3-param3'; 

    preg_match_all('/(\w+)-(\w+)/', $_GET['params'], $matches, PREG_SET_ORDER); 
    foreach ($matches as $match) { 
     $_GET[$match[1]] = $match[2]; 
    } 
    unset($_GET['params']); 

    var_dump($_GET); 
?> 

Это настроит ваш $_GET суперглобальный содержать ключ => как если бы они были переданы как отдельные параметры.

2

Просто используйте:

Options +FollowSymLinks 

RewriteEngine On 

RewriteBase/
RewriteRule ^phpfile.php/something1-([^/]+)/something2-([^/]+)/somethin3-([^/]+)$ phpfile.php?something1=$1&something2=$2&something3=$3 [QSA] 

Затем в коде использовать $ _GET

Смежные вопросы