【问题标题】:Trouble preserving $_GET variables无法保存 $_GET 变量
【发布时间】:2012-07-24 14:00:45
【问题描述】:

我想从 /gallery/X 重定向到 gallery.php?category=X

但是当我真正进入地址时,我的旧 $_GET 变量 'category' 被转换为形式:

$_GET['category'] = "X.php/X"   

这就是我的 .htaccess 的样子:

RewriteBase /

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteCond  %{REQUEST_FILENAME} !-d
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L]

我在 RegEx 方面非常糟糕,而且对 .htaccess 几乎一无所知。我一直在尝试使用此重写规则来保留 $_GET 变量,但我似乎没有做任何事情。我应该在这里做什么?

谢谢!

【问题讨论】:

    标签: php regex .htaccess


    【解决方案1】:

    改变你的规则:

    RewriteEngine on
    RewriteBase /
    
    RewriteCond  %{REQUEST_FILENAME} !-d
    RewriteCond  %{REQUEST_FILENAME} !-f
    RewriteRule ^gallery/(.*)$ /gallery.php?category=$1 [L]
    
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
    

    另外,将QSA 添加到您的操作中,[L,QSA]。这会在重定向期间附加查询字符串,因此它应该保留您以前的数据。

    说明:

    您的重写需要按特定顺序进行,因为[L] 选项就像向服务器发出一个全新的请求。因此,当您对gallery/X 的请求进入时,它会将您的请求重写为/gallery.php?category=X。当服务器请求此页面时,它匹配您的第一个规则,这意味着它被视为 X.php/X,然后作为额外的 $1 返回到原始请求。

    听起来令人困惑,但我认为这就是发生的事情。

    【讨论】:

    • 谢谢,成功了!我仍然对更改订单和添加 QSA 是如何做到的感到困惑,您介意解释一下请求发生了什么,以便我能更好地理解 htaccess 吗?
    • 添加了解释。我认为这就是正在发生的事情。很高兴它成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2012-02-20
    • 1970-01-01
    相关资源
    最近更新 更多