правило перезаписи htaccess - PullRequest
0 голосов
/ 07 февраля 2011

У меня следующий URL

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

Могу ли я переписать его с помощью htaccess на

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

также параметры являются динамическими, они могутбыть 1,2,3 или 4

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

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

Options +FollowSymLinks

RewriteEngine On

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

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

1 голос
/ 07 февраля 2011

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

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

Оно будет работать с любым количеством параметров.

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

1 голос
/ 07 февраля 2011

Если список параметров будет переменным , и вы не хотите включать отдельные правила для каждого случая в ваш файл .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 так, чтобы он содержал пары ключ => значение, как если бы они были переданы как отдельные параметры.

...