Я пытаюсь написать набор правил mod_rewrite для выполнения следующих условий:
1) /aaa (redirects to) --> /xxx_aaa.php
2) /aaa/ --> /xxx_aaa.php
3) /aaa?w=x&y=z --> /xxx_aaa.php?w=x&y=z
3) /aaa/?y=z --> /xxx_aaa.php?y=z
4) /aaa/bbb/ --> /xxx_aaa_bbb.php
5) /aaa/bbb/ccc/ --> /xxx_aaa_bbb_ccc.php
6) /aaa/bbb/cc12-34cc --> /xxx_aaa_bbb_cc12-34cc.php
7) /aaa/bbb/ccc/?y=z --> /xxx_aaa_bbb_ccc?y=z.php
Приведенный выше список не является исчерпывающим, но он дает вам представление обо всех возможных перестановках, к которым я стремлюсьпокрывать.А именно, это:
1) До трех уровней подкаталогов
2) Работает независимо от того, присутствует ли закрывающая косая черта
3) Передать строки запроса GET, если есть
Это то, что я сейчас использую:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9a-zA-Z\-]+)$ /xxx_$1.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/$ /xxx_$1.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/\?([0-9a-zA-Z\-=&]+)$ /xxx_$1.php?$2 [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)$ /xxx_$1_$2.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/$ /xxx_$1_$2.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/\?([0-9a-zA-Z\-=&]+)$ /xxx_$1_$2.php?$3 [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)$ /xxx_$1_$2_$3.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/$ /xxx_$1_$2_$3.php [L]
RewriteRule ^([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/([0-9a-zA-Z\-]+)/\?([0-9a-zA-Z\-=&]+)$ /xxx_$1_$2_$3.php?$4 [L]
И, кажется, это работает просто отлично.
Но я не могу не думать, что должен быть гораздо более элегантный способделая это - возможно, даже объединяя все вышеперечисленное в одну строчку.
Есть идеи?Любая помощь высоко ценится, спасибо.:)