Php Apache mod_重写查询字符串

Php Apache mod_重写查询字符串,php,apache,mod-rewrite,query-string,Php,Apache,Mod Rewrite,Query String,因此,我的staff.php?action=[action]文件被重写为/staff/[action],其中action可以取3个值new/edit/delete 我想在提交时显示成功或失败消息。我试图重定向到/staff/new&error=[error]或/staff/new?error=[error] 但是,var\u dump($\u GET)只返回操作的查询字符串 我找到的唯一解决方案是/staff?action=[action]&error=[error],但我不喜欢它。有没有办法改

因此,我的
staff.php?action=[action]
文件被重写为
/staff/[action]
,其中
action
可以取3个值
new/edit/delete

我想在提交时显示成功或失败消息。我试图重定向到
/staff/new&error=[error]
/staff/new?error=[error]

但是,
var\u dump($\u GET)
只返回
操作的查询字符串

我找到的唯一解决方案是
/staff?action=[action]&error=[error]
,但我不喜欢它。有没有办法改写我的规则

我不想要
/staff/new/error/[error]

## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

RewriteRule ^staff/(.+)$ /staff.php?action=$1 [L]

您可以使用QSA标志将查询字符串添加到转发页面

RewriteRule ^staff/(new|edit|delete)$ /staff.php?action=$1 [L,QSA]

添加您的重写规则,您可能缺少[QSA],但这只是一个猜测,因为没有代码。我想要很多东西,但您不想向我们显示您的重写规则?好的,但是如果有人键入
/staff/new&a=b
?我将得到一个
500内部服务器错误
为什么?它将被转发到
/staff.php?action=new&a=b
。无论如何,出于安全原因,您应该始终检查GET参数。在这种情况下,是否只有
error
参数可以添加到查询字符串中?如果是,则可以添加一个条件以仅匹配该可能性