重写purl和querystrings的规则

时间:2012-02-17 11:52:56

标签: apache .htaccess mod-rewrite redirect

这条规则有什么问题?

上的RewriteEngine
  

RewriteCond%{QUERY_STRING}!&?n = [a-z]?

     

RewriteCond%{HTTP_HOST} ^(?:www。)([a-z] +)。myconsultinghouse.com $

     

RewriteRule ^ / $ /login.php?n=%1 [L,QSA]

     

RewriteRule ^([a-z] +)?([^ /] *)$ /$1.php?n=%1 [L,QSA] OR

     

RewriteRule ^([az] +)?([^ /] )/([^ /] )$ /$1.php?n=%1&et=$2 [L,QSA ]或

     

RewriteRule ^([az] +)?([^ /] )/([^ /] )/([^ /] *)$ /$1.php?n=%1& ; et = $ 2& ne = $ 3 [L,QSA]

我想要这样:

如果用户访问该页面 - www.NameOfUser.domain.com/(NULL)

重定向/login.php?n=NameOfUser

如果用户访问该页面 - www.NameOfUser.domain.com/page

重定向到/page.php?n=NameOfUser

如果用户访问该页面 - www.NameOfUser.domain.com/page/group

重定向到/page.php?n=NameOfUser&et=group

如果用户访问该页面 - www.NameOfUser.domain.com/page/group/event

重定向/page.php?n=NameOfUser&et=group&ne=event

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

注意:

  • ?未包含在查询字符串中。
  • Conds仅适用于以下规则,但不适用于后续规则。
  • 查询字符串在规则匹配
  • 中不可用
  • 由于您在规则模式中没有前导/,我认为这是在DOCROOT/.htaccess文件中,在这种情况下,您应该设置一个基础并在替换中使用相对路径目标

这样:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST}             ^www\.([a-z]+)\.myconsultinghouse\.com$
RewriteRule ^                        -                                [E=USER:%1]

RewriteCond %{QUERY_STRING}          \bn=[a-z]*\b                     [OR]
RewriteCond {%ENV:USER}              =""
RewriteRule ^                        -                                [S=4]

RewriteRule ^/$                      login.php?n=%{ENV:USER}          [L,QSA]
RewriteRule ^([a-z]+)/?$             $1.php?n=%{ENV:USER}             [L,QSA]
RewriteRule ^([a-z]+)/(.*?)/?$       $1.php?n=%{ENV:USER}&et=$2       [L,QSA]
RewriteRule ^([a-z]+)/(.*?)/(.*?)/?$ $1.php?n=%{ENV:USER}&et=$2&ne=$3 [L,QSA]

这假定用户名为[a-z]+。如果您想允许数字和_

,您也可以考虑\w+