【问题标题】:Modrewrite and PHP issuesModrewrite 和 PHP 问题
【发布时间】:2009-07-27 21:06:04
【问题描述】:

我正在尝试编写此重写代码,但它无法正常工作(apache 2.2):

RewriteEngine on
RewriteBase /

RewriteRule ^account/activate\?token=(.*) index.php?route=account/activate&token=$1

我尝试了许多不同的变体。在尝试了大约一个小时并搜索谷歌后,我被难住了。这就是你进来的地方!

【问题讨论】:

  • 也许可以稍微解释一下您要做什么?可能有一些传入和传出 URI 的示例,以及您希望保留哪些参数?
  • 什么不起作用?有什么问题,你想达到什么目的?
  • mod_rewrite 是否适用于其他规则?
  • 是的 mod rewrite 适用于其他规则。示例网址:site.com/account/activate?token=thisisamd5hash 我基本上希望它转到:site.com/index.php?route=account/activate&token=md5hash
  • 重写日志说什么?

标签: apache mod-rewrite


【解决方案1】:

试试这个

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^account/activate$ index.php?route=account/activate&%1

基本上这会将整个查询字符串映射到 RewriteRule 中的 %1,然后您可以使用旧的常规 $_GET['token'] 从 php 脚本访问您的令牌

【讨论】:

    【解决方案2】:

    RewriteRule directive 的模式仅针对 URI 路径进行测试。查询字符串只能用RewriteCond directive进行测试:

    RewriteCond %{QUERY_STRING} ^token=(.*)
    RewriteRule ^account/activate$ index.php?route=account/activate&token=%1
    

    但有一个更简单的解决方案:只需设置QSA flag 以使查询字符串自动附加到新的查询字符串:

    RewriteRule ^account/activate$ index.php?route=account/activate [QSA]
    

    注意:如果替换中定义了查询,您只需设置QSA 标志。如果没有,原来的查询已经会自动追加。

    【讨论】:

      【解决方案3】:

      我用过这个:

      RewriteEngine On
      
      RewriteRule ^account/activate/?$ index.php?route=account/activate&%{QUERY_STRING}
      RewriteRule ^account/activate/?/$ index.php?route=account/activate&%{QUERY_STRING}
      

      它适用于这个:

      <?php 
      
      echo "route is: " . $_GET['route'];
      echo "</br>";
      echo "token is " . $_GET['token'];
      

      我的代码所在的目录称为 test。 这些是我的网址:

      http://localhost:80/test/account/activate/?token=test
      http://localhost:80/test/account/activate/?token=asd

      【讨论】:

      • 好的,您是否尝试用我的代码片段替换整个 .htaccess。如果这不起作用,我认为它是配置错误。也许你可以发布整个 htaccess。
      • 它与您的完美匹配。页面出现,路由器 var 工作,但令牌为空。
      • 我认为我们在错误的页面上,我希望 url 显示 ?token= ,例如 /account/activate/?token=adasdasd
      【解决方案4】:

      您不能将 URL 的参数部分与 mod_rewrite 匹配。

      测试 URL 中参数的唯一方法是使用 RewriteCond 指令并测试 env 变量 QUERY_STRING

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 2011-07-25
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多