Firendly URL в htaccess

0

У меня проблема с дружественным адресом в.htaccess. Мне нужно что-то вроде этого

http://example.com/cnt1/cmp1/act1/id,1/cid,2/sid,3/etc..
http://example.com/index.php?controller=cnt1&component=cmp1&action=act1&data=id,1/cid,2/sid,3/etc..

а также

http://example.com/cnt1/cmp1/act1
http://example.com/index.php?controller=cnt1&component=cmp1&action=act1

а также

http://example.com/cnt1/cmp1
http://example.com/index.php?controller=cnt1&component=cmp1

а также

http://example.com/cnt1
http://example.com/index.php?controller=cnt1

а также

http://example.com/
http://example.com/index.php

Мой файл.htaccess:

Options +FollowSymLinks
RewriteEngine on

RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g|png|js|css|swf|ico|txt|pdf|xml|zip)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteCond %{REQUEST_URI} !-l
RewriteRule ^([,a-zA-Z0-9_-]*)/?([a-zA-Z0-9_-]*)?/?([a-zA-Z0-9_-]*)?/?([/\.,a-zA-Z0-9_-]*)$ index.php?controller=$1&component=$2&action=$3&data=$4 [NC,L]

ErrorDocument 404 /index.php?controller=error404 

но что-то не так, например http://example.com/& или http://example.com/ <ошибка не найдена. Кто-нибудь может мне помочь?

Теги:
.htaccess
mod-rewrite

1 ответ

0
Лучший ответ

Я думаю, вам будет легко, используя более простое правило URL Rewrite и проанализируйте свой URL-адрес на PHP.

RewriteRule    ^(.*)$    /index.php?query=$1    [END,QSA]

И на вашем PHP что-то вроде

// Parse Query
$default = [
    "defaultController",
    "defaultComponent",
    "defaultAction",
];
$query = explode('/', $_GET['query']);
$temp = array_slice($query, 3);
$query = array_merge($default, array_slice($query, 0, 3));

// Parse Data
if(!empty($temp)) {
    $data = [];
    $m = count($temp);
    for($i=0;$i<$m;++$i) {
        list($k,$v) = explode(',', $temp[$i]);
        $data[$k] = $v;
    }
}
else $data = null;

// Some testing
if(controller_exists($query[0]))
     $controller = $query[0]();
else throw new Exception('Controller not found: '.$query[0]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню