【问题标题】:.htaccess RewriteEngine not working for secondary GET.htaccess RewriteEngine 不适用于辅助 GET
【发布时间】:2016-05-22 00:10:45
【问题描述】:

我正在我的网站中创建友好链接,但我遇到了问题。我写了这个,但只有第一行代码在工作,我不知道为什么:

RewriteRule ^user/([0-9a-zA-Z]+) user.php?user=$1 [NC,L]
RewriteRule ^user/([0-9a-zA-Z]+)/options user.php?user=$1&options [NC,L]

当我转到 test.com/user/tom 时,一切都很好,但是当我尝试 test.com/user/tom/options 时,它只是在同一页面上。

我有 php 脚本应该为不同的$_GET 加载不同的页面,如果与普通链接一起使用,它可以工作。

【问题讨论】:

  • 因为捕获第一行...如果您可以将第二行 ^user 更改为另一个名称...
  • 我不知道它是这样工作的!谢谢,刚刚换行了:)
  • 换线真的对你有用吗?

标签: php .htaccess


【解决方案1】:

这里正确的做法是交换行。虽然这可能会解决您的问题,但它也会将user/tom/foo/bar 发送到第一条规则。这样做的原因是因为模式没有用$ 关闭。因此,您的规则应如下所示:

RewriteRule ^user/([0-9a-zA-Z]+)$ user.php?user=$1 [NC,L]
RewriteRule ^user/([0-9a-zA-Z]+)/options$ user.php?user=$1&options [NC,L]

提示:如果您还有其他页面供用户使用,您可以简化第二条规则,通过捕获的方式包含不同的细分:

RewriteRule ^user/([0-9a-zA-Z]+)/(options|other-page)$ user.php?user=$1&$2 [NC,L]

还考虑到您正在使用NC(无大小写)标志这一事实,您可以将A-Z 放到您的捕获组中。您也可以使用\d 表示数字。示例[a-z\d]+

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多