htaccess-rewrite-rule для более чем одного параметра

Я использую следующее правило

RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1

для переписывания

www.mysite.com/123

to

www.mysite.com/index.php?action=123

Это должно оставаться так, но есть случаи, когда мне также нужно переписать

www.mysite.com/123/abc

to

www.mysite.com/index.php?action=123&example=abc

Как я могу этого добиться? Спасибо!


person Raphael Jeger    schedule 25.05.2013    source источник


Ответы (1)


Включите mod_rewrite и .htaccess через httpd.conf, а затем поместите этот код в каталог .htaccess под DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?action=$1&example=$2 [L,QSA]

RewriteRule ^([^/]+)/?$ index.php?action=$1 [L,QSA]
person anubhava    schedule 25.05.2013
comment
кажется, это работает, спасибо, но не могли бы вы объяснить, почему вы изменили мою строку на новую (последнюю в своем посте)? - person Raphael Jeger; 26.05.2013
comment
Конечно, я добавлю некоторые пояснения к своему ответу, как только буду рядом со своим компьютером. Также, если это сработало, вы можете отметить его как принятое. - person anubhava; 26.05.2013
comment
Только что вернулся. В вашем правиле было 2 проблемы: 1. Не использовать флаг L (чтобы отметить конец правила) и 2. Объединение 2 правил в 1 не является хорошей идеей, иначе иногда вы можете получить параметр example как нулевой. - person anubhava; 26.05.2013
comment
Теперь все работает идеально, спасибо! Моя проблема не имела ничего общего с вашим правилом напрямую, но все мои ссылки CSS, JS и IMG были относительными, потому что у меня был только один подкаталог (который правило htaccess превращает в параметры) до этого изменения;) - person Raphael Jeger; 26.05.2013