【问题标题】:Regex redirecting page to unwanted page正则表达式将页面重定向到不需要的页面
【发布时间】:2013-07-25 14:22:05
【问题描述】:

我正在使用 htaccess 清理 URL,以下是个人资料页面的规则

RewriteRule ^([0-9a-z]+)$ profile.php?user=$1

但我还有其他页面,例如关注者,关注登录用户,他们可以在 /followers 页面上看到他们的关注者,此规则是

RewriteRule ^following$ follow.php?follow=following
RewriteRule ^followers$ follow.php?follow=followers

但是当我转到/followers 时,我会被重定向到profile.php(上面的第一条规则),正如您在第一条规则中看到的那样,域名localhost/text_that_comes_here 转到profile.php 之后的任何内容

有什么办法可以让我的/followers 和其他页面正确重定向。

【问题讨论】:

    标签: regex apache .htaccess url-rewriting


    【解决方案1】:

    您应该将更具体的规则放在更通用的规则之前。
    在这种情况下,规则 ^following$^followers$^([0-9a-z]+)$ 更具体...
    这将导致“following”和“followers”被第一条规则^([0-9a-z]+)$捕获,因此重定向到profile.php

    按照以下方式重新排序您的 .htaccess 应该可以解决问题:

    RewriteRule ^following$ follow.php?follow=following
    RewriteRule ^followers$ follow.php?follow=followers
    RewriteRule ^([0-9a-z]+)$ profile.php?user=$1
    


    编辑: 要回​​答您的评论,您可以使用以下方法以编程方式执行此操作:
    *但是,这是一种 hack,我不会将其用作永久修复。

    由于它会重定向到profile.php?user=following(或profile.php?user=followers),您可以在profile.php页面的开头添加一个条件,并检查参数$_GET["user"]="following"(或“followers”)是否存在。 比如:

    if ($_GET["user"]="following" || $_GET["user"]="followers") {
        $_GET["follow"]=$_GET["user"]; //set the parameter required in “follow.php”
        include("follow.php");
        exit;
    }
    

    这意味着您将无法拥有任何名为 followingfollower 的用户,这无论如何都不应该发生……但仍然如此。

    【讨论】:

    • 我已经尝试过了,是的,这是可行的,但这将是一个调整,难道没有任何程序化的方式来解决这个问题吗?
    • 我编辑了我的答案以添加一种编程方式来做到这一点。但是,这样做的方式不太干净。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2019-07-04
    • 2018-12-06
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多