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

.htaccess (Apache Mod_Rewrite)请帮助压缩我的查询,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我正在尝试编写一组mod_重写规则,以满足以下条件: 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/ --&

我正在尝试编写一组mod_重写规则,以满足以下条件:

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]
它似乎工作得很好

但我不禁想,一定有一种更优雅的方式来做这件事——也许甚至可以将以上所有内容浓缩成一行

有什么想法吗?非常感谢您的帮助,谢谢。:)

像这样:

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]
NC=非情况,因此A-Z=A-Z


QSA=querystringappend=?将设置w=x&y=z(例如PHP中的$\u GET['w'])

为了性能,最好保持原样,但我很好奇如何做到这一点。一艘客轮就太棒了!只是想知道是否有可能使用另一个组来组合$1$2$3。。比如^([0-9A-Z\-]+)/)+?$..@NitWit好主意,但这需要解析1个文件中的所有“子文件夹”,而不是在这里为每个文件夹指定一个特定的文件