apache - URL 重写和参数 GET 问题

标签 apache .htaccess mod-rewrite url-rewriting

我在构建 url 重写时遇到一些问题。在我的本地服务器上,使用 nginx ,一切都很顺利。但是,当我尝试使用 htacces 使其适用于 apache 时,我就有点发疯了。

我的网址如下所示:

http://example.com/controller/action/param1/value1/param2/value2

以下是适用于前一种情况的 htaccess:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_URI} !^/(images|css|js)/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>

但在某些情况下我有一些额外的参数,例如 Facebook 身份验证:

http://example.com/controller/action?hauth.start=Facebook&hauth.time=1382665465

此案例不适用于之前的 htaccess。 GET 变量中没有任何内容。我该如何解决这个问题?

最佳答案

在规则中使用QSA(查询字符串附加)标志

<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteCond %{REQUEST_URI} !^/(images|css|js)/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?$1 [L,QSA]
</IfModule>

QSA 标志确保在添加新查询参数时保留现有查询字符串。

关于apache - URL 重写和参数 GET 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19571541/

相关文章:

php - 我的 htaccess 文件不断出现 404 错误

javascript - PureChat 和 Mod Deflate

php - .htaccess条件: https, www,重写

html - .htaccess 重写单页 anchor 规则(seo 友好)

http - .htaccess 按文件类型限制访问

php - mod_rewrite 两个 .htaccess 文件之间的交互

node.js - 生产中的 Ember CLI 与 Apache 服务器上的 Sails.js API 通信时出现问题

php - 隐藏或混淆文件的 url 路径

php - 如何从我的 PHP 应用程序获取用户的 Windows 用户名?

apache - 如何重定向和显示具有相同 url 的内容?