代码之家  ›  专栏  ›  技术社区  ›  Andy

php to htaccess rewrite-如果没有发布数据,则重定向

  •  2
  • Andy  · 技术社区  · 15 年前
    if( count( $_POST ) < 1 ) {
        // determine if this was a secure request - we use a non standard HTTPS port so the SERVER_HTTPS_PORT define should always be used in place of 443
        $protocol = $_SERVER['SERVER_PORT'] == SERVER_HTTPS_PORT ? 'https' : 'http';
        header( "HTTP/1.0 301 Moved Permanently" ); 
        header( "Status: 301" ); // this is for chrome compliance
        header( "Location: $protocol://".CLIENT_DOMAIN."{$_SERVER['REQUEST_URI']}" );       
        session_write_close();
        exit;
    }
    

    是否可以使用.htaccess规则重写此功能?

    逻辑:

    如果不是POST请求,则在维护协议的同时,通过发出301头和状态重定向到具有整个查询字符串的等效页。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Gumbo    15 年前

    试试这个:

    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{SERVER_PORT}s ^443(s)|.*
    RewriteRule ^foo/bar$ http%1://www.example.com%{REQUEST_URI} [L,R=301]
    

    不是你只需要更换 443 由你 SERVER_HTTPS_PORT 价值与 www.example.com 由你 CLIENT_DOMAIN 价值。

        2
  •  2
  •   RaYell    15 年前

    这应该适用于您(替换 www.google.com 与你 CLIENT_DOMAIN )

    RewriteEngine on
    RewriteCond %{SERVER_PORT} ^80$
    RewriteCond %{REQUEST_METHOD} !^POST$ [NC]
    RewriteRule ^(.*)$ http://www.google.com/$1 [L,QSA,R=301]
    RewriteCond %{SERVER_PORT} ^443$
    RewriteCond %{REQUEST_METHOD} !^POST$ [NC]
    RewriteRule ^(.*)$ https://www.google.com/$1 [L,QSA,R=301]
    
        3
  •  0
  •   Pascal MARTIN    15 年前

    查看Apache的文档 mod_rewrite ,可能有一种方法,使用 %{REQUEST_METHOD} 在一个 RewriteCond 条件;像这样的事情可能会起作用:

    RewriteCond %{REQUEST_METHOD} !=POST
    

    当然,接下来是 RewriteRule 将所有内容重定向到非日志页。

    我现在没有测试的方法,所以这可能不是完美的,但是像这样的东西可能会起作用——或者,至少,指导您找到解决方案:

    RewriteRule ^(.*)$ $1 [QSA,R=301,L]
    

    这个想法正在酝酿中

    • 匹配所有内容
    • 重定向到匹配的内容
    • 保留查询字符串(qsa标志)
    • 用301代码重新定向
    • 停在那里