RewriteEngine on
RewriteRule ^([a-zA-Z0-9-_]+)$ /index.php?mainp=$1&%{QUERY_STRING}
RewriteRule ^([a-zA-Z0-9-_]+)/$ /index.php?mainp=$1&%{QUERY_STRING}
RewriteRule ^([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)$ /index.php?mainp=$1&subp=$2&%{QUERY_STRING}
RewriteRule ^([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)/$ /index.php?mainp=$1&subp=$2&%{QUERY_STRING}
RewriteRule ^([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)/([a-zA-Z0-9-_]+)$ /index.php?mainp=$1&subp=$2&id=$3&%{QUERY_STRING}
...
我认为这不是编写此规则的最佳方式。任何帮助将不胜感激。
答案 0 :(得分:0)
RewriteRule ^([a-z0-9-_]+)/?$ /index.php?mainp=$1 [QSA,NC,L]
RewriteRule ^([a-z0-9-_]+)/([a-z0-9-_]+)/?$ /index.php?mainp=$1&subp=$2 [QSA,NC,L]
RewriteRule ^([a-z0-9-_]+)/([a-z0-9-_]+)/([a-z0-9-_]+)/?$ /index.php?mainp=$1&subp=$2&id=$3 [QSA,NC,L]
通过在?
之前添加$
,您可以选择尾随斜线,因此其中一条规则将覆盖您的2条(第1行= 1& 2;第2行= 3& 2; 4,第3行= 5& 6(6未列出,但我猜它确实存在))
我已将&%{QUERY_STRING}
替换为[QSA]
标志 - 完全相同(甚至可以认为更方便)。
我还从模式中删除了A-Z
,并替换为[NC]
标志(NC =忽略大小写)。这使得所有规则都更短,因此更容易阅读。