2

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

但是当我真正找到地址时,我的旧 $_GET 变量“类别”被转换为以下形式:

$_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 变量,但我似乎没有做任何事情。我应该在这里做什么?

谢谢!

4

1 回答 1

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

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

于 2012-07-26T02:54:08.367 回答