2012-09-01 18 views
5

Muszę przekazać 3 zmienne za pomocą adresu URL, ale za pomocą ukośników. Tak na przykład chciałbym skorzystać z tego adresu:Przekształć tekst po ukośnikach w zmienne za pomocą HTACCESS

http://www.example.com/variable1/variable2/variable3

mam to w moim .htaccess który umożliwia tekst po zmiennej najpierw mają być przekazane, ale nie mogę dostać dwa pozostałe przejść przez, nawet jeśli dodam & $ 2

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /?([A-Za-z0-9_-]+)/?$ process.php?width=$1&height=$2 [QSA,L] 

Wszelkie linki lub pomocy byłoby świetnie

Odpowiedz

5

Jesteś tylko capt uring jednej zmiennej w regule przepisywania.

Trzeba coś takiego:

RewriteRule ^([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)/?$ process.php?width=$1&height=$2&third=$3 [QSA,L] 

lub, nieco krótszy:

RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ process.php?width=$1&height=$2&third=$3 [QSA,L] 

(postać \w słowo zawiera litery, cyfry i podkreślenia)

Zrobiłem tylko ending slash opcjonalnie, więc ta reguła przepisywania zrobiłaby tylko coś, gdyby były dokładnie 3 zmienne.

+0

@Fraggy normalnie używać wielu reguł przepisywania za to, więc najpierw regułę z 3 Vars, to reguła z 2, a następnie reguły tylko 1. Można też ująć zmienne opcjonalne w zagnieżdżonym nawiasie nieprzechwytującym. – jeroen

6

Może się okazać, że łatwiej chwycić parametry w pliku .php, poprzez:

$pathinfo = isset($_SERVER['PATH_INFO']) 
    ? $_SERVER['PATH_INFO'] 
    : $_SERVER['REDIRECT_URL']; 

$params = preg_split('|/|', $pathinfo, -1, PREG_SPLIT_NO_EMPTY); 

echo "<pre>"; 
print_r($params); 

Więc wywołanie skryptu z tym:

http://www.example.com/variable1/variable2/variable3

wróci:

Array 
(
    [0] => variable1 
    [1] => variable2 
    [2] => variable3 
) 

Będzie to działać zarówno dla:

http://www.example.com/variable1/variable2/variable3 i http://www.example.com/process.php/variable1/variable2/variable3

Powiązane problemy