URL重写,单个入口点的链式结构化URL

时间:2011-07-09 14:22:06

标签: .htaccess mod-rewrite url-rewriting

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}
...

我认为这不是编写此规则的最佳方式。任何帮助将不胜感激。

1 个答案:

答案 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]
  1. 通过在?之前添加$,您可以选择尾随斜线,因此其中一条规则将覆盖您的2条(第1行= 1& 2;第2行= 3& 2; 4,第3行= 5& 6(6未列出,但我猜它确实存在))

  2. 我已将&%{QUERY_STRING}替换为[QSA]标志 - 完全相同(甚至可以认为更方便)。

  3. 我还从模式中删除了A-Z,并替换为[NC]标志(NC =忽略大小写)。这使得所有规则都更短,因此更容易阅读。