1

我正在使用 .htaccess 文件中的 mod rewrite 设置 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

我想我只需要使用'anything can be here'类型变量稍微编辑重写规则,但我不确定如何做到这一点。

4

2 回答 2

1

我想您可以在 [^/]+/ 前面加上前缀来匹配并忽略该用户名/

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

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

于 2013-01-03T00:52:45.463 回答
0

要回答您的问题,“这里可以是任何类型的变量”就像句号一样.-它的意思是“任何字符”。星号也*表示“零个或多个前面的字符或带括号的分组字符”

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

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

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

于 2013-01-03T01:12:03.263 回答