【问题标题】:Apache mod_rewrite query stringsApache mod_rewrite 查询字符串
【发布时间】:2014-07-27 17:38:15
【问题描述】:

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

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

但是,var_dump($_GET) 只返回action 的查询字符串。

我找到的唯一解决方案是/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] ,但这只是一个猜测,因为没有代码。
  • 我想要很多东西,但你不想向我们展示你的重写规则吗?

标签: php apache mod-rewrite query-string


【解决方案1】:

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

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

【讨论】:

  • 好的,但是如果有人输入/staff/new&a=b 怎么办?我会收到500 Internal Server Error
  • 你为什么要这样做?它将被转发到/staff.php?action=new&a=b。无论如何,出于安全原因,您应该始终检查您的 GET 参数。在这种情况下,是否只有 error 参数可以添加到您的查询字符串中?如果是,则可以添加一个条件以仅匹配该可能性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2015-06-12
  • 2021-06-28
  • 1970-01-01
  • 2011-07-23
  • 2023-03-22
相关资源
最近更新 更多