我有一个.htaccess文件,它使用路由查询字符串参数将所有URL重定向到index.php文件:
# Enable Mod_rewrite
RewriteEngine on
# Redirect pretty URLs to the index file
RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1
这很好用,但带有查询字符串的网址除外。例如,我有一个表单,使用错误代码(/admin/login?error=1
)重定向回登录屏幕。显然,问题是,$_GET[error]
参数永远不会传递给主脚本。
我如何将这些参数传递给脚本?
答案 0 :(得分:7)
只需添加[QSA]作为标记:
'qsappend | QSA'(查询字符串追加)此标志强制重写 引擎将替换字符串的查询字符串部分附加到 现有的字符串,而不是替换它。如果您愿意,请使用此选项 通过重写规则向查询字符串添加更多数据。
RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1 [QSA]
答案 1 :(得分:3)
这是我的标准mod_rewrite条目(针对您的问题进行了更改)。我正在添加它以保存任何潜在的痛苦,如图像和放大器包括。它会重定向除现有文件之外的所有内容。
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1 [QSA]
</IfModule>
答案 2 :(得分:2)
设置标志QSA - 查询字符串追加
# Enable Mod_rewrite
RewriteEngine on
# Redirect pretty URLs to the index file
RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1 [QSA]
(我所做的只是添加[QSA])
Apache Mod_Rewrite Documentation在标志上有更多内容。