Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 保存$\u GET变量时遇到问题_Php_Regex_.htaccess - Fatal编程技术网

Php 保存$\u GET变量时遇到问题

Php 保存$\u GET变量时遇到问题,php,regex,.htaccess,Php,Regex,.htaccess,我想从/gallery/X重定向到gallery.php?category=X 但当我实际转到地址时,我的旧$u GET变量“category”被转换为以下形式: $_GET['category'] = "X.php/X" 这就是my.htaccess的外观: RewriteBase / RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f Rewrite

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

但当我实际转到地址时,我的旧$u GET变量“category”被转换为以下形式:

$_GET['category'] = "X.php/X"   
这就是my.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]
我的正则表达式很差,几乎没有关于.htaccess的任何东西。我一直在尝试使用这个重写规则来保留$\u GET变量,但我所做的一切似乎都不起作用。我在这里该怎么办


谢谢

移动您的规则:

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吗?添加了一个解释。我想这就是发生的事情。很高兴它成功了!