麻烦保留$ _GET变量

时间:2012-07-26 02:44:28

标签: php regex .htaccess

我想从/ 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变量,但我似乎没有做任何工作。我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:3)

移动你的规则:

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返回到原始请求。

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