在漂亮的URL中使用查询字符串进行Mod_Rewrite

时间:2012-06-07 23:49:34

标签: php .htaccess mod-rewrite

我有一个.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]参数永远不会传递给主脚本。

我如何将这些参数传递给脚本?

3 个答案:

答案 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在标志上有更多内容。