(Apache Mod_Rewrite)请帮助压缩我的查询

R C*_*R C 4 .htaccess mod-rewrite

我正在尝试编写一组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
Run Code Online (Sandbox Code Playgroud)

以上列表并非详尽无遗,但它让您了解我希望涵盖的所有可能的排列.即,这些是:

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]
Run Code Online (Sandbox Code Playgroud)

它似乎工作得很好.

但我不禁想到必须有一种更优雅的方式 - 或许甚至将上述内容整合到一条线上.

有任何想法吗?任何帮助非常感谢,谢谢.:)

Boo*_*eus 6

像这样:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9A-Z\-]+)/?$ /xxx_$1.php [L,QSA,NC]
RewriteRule ^([0-9A-Z\-]+)/([0-9A-Z\-]+)/?$ /xxx_$1_$2.php [L,QSA,NC]
RewriteRule ^([0-9A-Z\-]+)/([0-9A-Z\-]+)/([0-9A-Z\-]+)/?$ /xxx_$1_$2_$3.php [L,QSA,NC]
Run Code Online (Sandbox Code Playgroud)

NC =非大小写,因此AZ = az

QSA =查询字符串append =?w = x&y = z将被设置(例如PHP中的$ _GET ['w'])