【问题标题】:How to write this .htaccess rewrite rule如何编写这个 .htaccess 重写规则
【发布时间】:2013-01-03 00:42:59
【问题描述】:

我正在使用 .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

我想我只需要使用“任何东西都可以在这里”类型变量稍微编辑重写规则,但我不确定该怎么做。

【问题讨论】:

  • 我不太明白,但据我所知,您只需将stats 替换为admin,如下所示:admin.* 并将hello 替换为@987654328 @。不过,不确定这是否是您想要的。

标签: .htaccess routing


【解决方案1】:

我猜你可以在 [^/]+/ 前面加上前缀来匹配并忽略那个用户名/

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

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

【讨论】:

    【解决方案2】:

    要回答您的问题,“这里可以是任何类型的变量”类似于句号. - 它表示“任何字符”。此外,星号* 表示“零个或多个前面的字符或带括号的分组字符”

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-07
      • 2015-02-15
      相关资源
      最近更新 更多