htaccess重写规则的内部服务器错误

时间:2016-05-03 15:20:09

标签: php regex .htaccess

我试图将带有多个查询字符串参数的网址放入文件夹结构网址,并收到500内部服务器错误。

我的传入网址如下 www.fivestarprofessional.com/ag?PY=16&PF=wm&MKT=Delaware

我的目标网址我需要写为 delaware.fivestarprofessional.com/16/wm/index.html

我创建了3个RewriteCond语句来捕获参数,创建了一个RewriteRule来创建输出

RewriteCond %{QUERY_STRING} !^(PY=.*)$ [NC]
RewriteCond %{QUERY_STRING} !^(PF=.*)$ [NC]
RewriteCond %{QUERY_STRING} !^(MKT=.*)$ [NC]
RewriteRule %3.fivestarprofessional.com/%1/%2/index.html

非常感谢任何协助。

2 个答案:

答案 0 :(得分:2)

您可以将此规则用于重定向:

RewriteCond %{QUERY_STRING} (?:^|&)PY=([^&]+) [NC]
RewriteCond %1::%{QUERY_STRING} (.*?)::(?:|.*&)PF=([^&]+) [NC]
RewriteCond %1/%2::%{QUERY_STRING} (.*?)::(?:|.*&)MKT=([^&]+)
RewriteRule ^ag/?$ http://%2.fivestarprofessional.com/%1/index.html? [L,NC,NE,R=302]
仅使用相同的%

从最近的条件中捕获

%{QUERY_STRING}个变量

答案 1 :(得分:0)

试试这个:

   count = 0;
   while(count < n)
    {
      x1 = gasdev(&idum);
      x2 = gasdev(&idum);
      z  = sqrt(1-p*p)*x1 + p*x2 + mu;
      z_p= x2 + mu_plus;

      if (z > 2.17 || z<-2.17) 
       {
         Z[count]=z; 
         Z_plus[count]=z_p;
         printf("%d %lf\n",count, Z[count]);
         count++;         
       }
  }

以下问题已得到纠正:

  • RewriteCond "%{QUERY_STRING}" "^PY=([^&]+).*&PF=([^&]+).*&MKT=([^&]+)" [NC] RewriteRule "www.fivestarprofessional.com/ag" "%3.fivestarprofessional.com/%1/%2/index.html" 需要3个参数而不是2个。

  • RewriteRule的参数未用引号括起来。

  • RewriteCond规则的反向引用......

    • ...仅引用匹配的最后一个条件(由@anubhava指出,在apache httpd docs中记录)。因此,规则需要合并为一个。
    • ...引用参数名称加上查询字符串的完整剩余部分
    • 由于使用RewriteCond锚点,
    • ...将与相应的ul参数匹配查询字符串。
    • ...无论如何都会是空的,因为当模式不匹配时触发规则(使用^前缀)

推荐阅读是apache httpd documentation的正确部分。

现有的解决方案假设......

  • 查询字符串以url参数!

  • 开头
  • 网址参数PYPYPF在查询字符串中的显示顺序是固定的。