我正在.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
我认为我只需要用“任何可以在这里”类型变量稍微编辑重写规则,但我不确定如何做到这一点。
答案 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"
结尾,那么您可以使用美元符号$
来匹配字符串的结尾。
RewriteRule admin$ admin.php [R,NC,L]
将www.anything.at/all/that/ends/in/admin
重写为www.anything.at/admin.php