【问题标题】:PHP - .htaccess and GET parametersPHP - .htaccess 和 GET 参数
【发布时间】:2015-06-20 15:23:46
【问题描述】:

我正在尝试在登录脚本上创建一个简单的重定向到另一个页面。

目前我正在使用.htaccess 将我的 URLS 重写为以下格式:

RewriteRule ^login$ ?i=l [L]
RewriteRule ^login([^/]*)$ ?i=l&=$1

因此,正常的 URL 是:domain.com/login - 尽管我希望能够执行以下操作:domain.com/login&redirect=/account/settings(其中“重定向”将是 $_GET 参数,我将在成功登录后重定向到)

我的问题是,如果我访问上述 URL,我会得到一个 404 页面未找到。我做错了什么?

【问题讨论】:

  • 您混淆了&?,因为它看起来... & 不能是网址本身的一部分。它必须是“百分比编码”。
  • 不应该 ? 将参数与 URL 中的路径分开吗?

标签: php regex .htaccess mod-rewrite redirect


【解决方案1】:

试试这些规则:

RewriteRule ^login/?$ ?i=l [L,QSA]
RewriteRule ^login(&[^/]+)/?$ ?i=l$1 [L,NC]

虽然我建议使用:

domain.com/login?redirect=/account/settings

并完全摆脱第二条规则。

第一条规则中的QSA 标志会将redirect=/account/settings 查询参数作为$_GET 添加到您的php 文件中。

【讨论】:

    【解决方案2】:

    我使用.htaccess。 它更实用、更简单。我不知道这是否是您需要的,但处理非常简单。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?param=$1 [L,NC]
    

    网址示例:

    domain.com/login/account/settings
    

    处理在脚本PHP中

    $param = $_GET['param'];
    echo $param;
    

    返回

    login/account/settings
    

    然后

    $param = $_SERVER['REQUEST_URI'];
    // (PHP 5 >= 5.2.0)
    // $param = filter_input(INPUT_SERVER, 'RESQUEST_URI');
    $param = explode('/',$param);
    print_r($param);
    

    返回

    Array( [0]=> [1]=>login [2]=>account [3]=>settings)
    

    使用这种方法可以实现多个目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-20
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多