Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Turn text after slashes into variables with HTACCESS

I need to pass 3 variables with a URL but using slashes. So for example I would use this URL:

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

I have this in my HTACCESS which allows the text after the first variable to be passed but I can't get the other two to come through, even if I add &$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]

Any links or help would be great

like image 577
Fraggy Avatar asked Sep 01 '12 15:09

Fraggy


2 Answers

You are only capturing one variable in your rewrite rule.

You need something like:

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

or, a bit shorter:

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

(the \w word character includes letters, digits and underscores)

I have made only the ending slash optional so this rewrite rule would only do something if there are exactly 3 variables.

like image 134
jeroen Avatar answered Sep 22 '22 19:09

jeroen


You might find it easier to grab the parameters in the .php file, via:

$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);

So calling the script with this:

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

would return:

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

This will work for both:

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

like image 42
Ross Smith II Avatar answered Sep 26 '22 19:09

Ross Smith II