1

我有一个 .htaccess 文件,它使用路由查询字符串参数将所有 URL 重定向到 index.php 文件:

# Enable Mod_rewrite
RewriteEngine on

# Redirect pretty URLs to the index file
RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1

这很好用,但其中包含查询字符串的 URL 除外。例如,我有一个带有错误代码 ( /admin/login?error=1) 的表单重定向回登录屏幕。显然,问题在于,$_GET[error]参数永远不会传递给主脚本。

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

4

3 回答 3

7

只需添加[QSA]作为标志:

'qsappend|QSA'(查询字符串追加) 此标志强制重写引擎将替换字符串的查询字符串部分追加到现有字符串,而不是替换它。当您想通过重写规则向查询字符串添加更多数据时,请使用此选项。

RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1 [QSA]

于 2012-06-07T23:53:29.613 回答
3

This is my standard mod_rewrite entry (altered for your question). I'm adding it to save anyone potential pain with stuff like images & includes. It redirects everything except existing files.

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\w\/\-]+)/?$ index.php?route=$1 [QSA]
</IfModule>
于 2012-06-08T00:05:30.507 回答
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 文档有更多关于标志的信息。

于 2012-06-07T23:53:28.737 回答