【问题标题】:htaccess Rewrite dont pass querystringhtaccess 重写不传递查询字符串
【发布时间】:2013-02-25 17:50:25
【问题描述】:

我的 htaccess 中有以下规则

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ redirect.php [L]
RewriteRule ^(.*)\.(?!js|css|png)([^.]*)$ redirect.php [L]

一切都很完美,除了一件事,查询字符串。
由于某种原因,查询字符串消失了......

我得到了以下网址 myweb.com/subscribe?email=blablabla 在 redirect.php 我有以下行:

echo $_GET['email']; //should echo the email

它没有回显任何东西...
*我检查它确实重写为redirect.php

任何想法为什么以及如何解决它?

【问题讨论】:

  • QSA 标志不起作用。我什么都试过了……
  • 请注意,您有 2 条规则,使用 QSA,这正确答案,在这两个规则中。
  • @Wrikken ofc,我两个都做了,但没用。我不是那个白痴而已
  • 让我们明确一点,QSA(或 Leonard 对此的回答)有效,所以必须有其他事情发生。更多的重定向可能在某个地方?您可以暂时将重定向设置为外部 ([R]),以在浏览器的网络日志中检查发生的情况和情况。

标签: php apache .htaccess mod-rewrite get


【解决方案1】:

通过以下步骤解决:

  1. 我不想重写 css、js、png 等文件,所以在我的最后一条规则中,它包含在正则表达式中 - 我将其拆分。
  2. 为最后两条规则添加了 [QSA] 标志
  3. 已添加RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} -d 更改为RewriteCond %{REQUEST_FILENAME} !-d

这就是它的样子:

RewriteEngine on
RewriteBase /
RewriteRule \.(ico|css|png|js|txt|xml)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .+ redirect.php [QSA,L]
RewriteRule ^(.*)$ redirect.php [QSA,L]

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2013-02-19
    • 2011-04-06
    相关资源
    最近更新 更多