如何写这个.htaccess重写规则

时间:2013-01-03 00:43:00

标签: .htaccess routing

我正在.htaccess文件中使用mod重写设置一个MVC样式的路由系统(以及一些php解析。)

我需要能够将不同的URL指向将用作控制器的不同php文件。 (index.php,admin.php等......)

我找到并编辑了一个重写规则,通过查看第一个斜杠之后的第一个单词来做到这一点:

RewriteCond %{REQUEST_URI} ^/stats(.*)
RewriteRule ^(.*)$ /hello.php/$1 [L]  

然而,我的问题是我希望它根据第二个单词重写,而不是第一个单词。我希望第一个单词是用户名。所以我想要这个:

http://www.samplesite.com/username/admin重定向到admin.php

而不是:

http://www.samplesite.com/admin

我认为我只需要用“任何可以在这里”类型变量稍微编辑重写规则,但我不确定如何做到这一点。

2 个答案:

答案 0 :(得分:1)

我猜您可以在[^ /] + /前缀匹配并忽略该用户名/

RewriteCond %{REQUEST_URI} ^/[^/]+/stats(.*)
RewriteRule ^[^/]+/(.*)$ /hello.php/$1 [L]  

然后http://www.samplesite.com/username/statsadmin将重定向到http://www.samplesite.com/hello.php/statsadmin(或者,我不知道.htaccess文件)

答案 1 :(得分:0)

要回答你的问题,“任何东西都可以在这里输入类型”就像一个句号. - 它意味着“任何角色”。此外,星号*表示“前面的字符中的零个或多个或带括号的分组字符”

但我认为您不需要...如果您的匹配网址始终以"admin"结尾,那么您可以使用美元符号$来匹配字符串的结尾。

Rewrit­eRule admin$ admin.php [R,NC,L]

www.anything.at/all/that/ends/in/admin重写为www.anything.at/admin.php