我想从/ 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变量,但我似乎没有做任何工作。我该怎么办?
谢谢!
答案 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
返回到原始请求。
听起来令人困惑,但我认为这就是发生的事情。