繁体   English   中英

php到htaccess重写-如果没有$ _POST数据则重定向

[英]php to htaccess rewrite - redirect if no $_POST data

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标头和状态,同时保持协议,将整个查询字符串重定向到等效页面。

尝试这个:

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

并非只需要用SERVER_HTTPS_PORT值替换443 ,用CLIENT_DOMAIN值替换www.example.com

这应该适合您(将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]

看看Apache的mod_rewrite的文档,可能有一种在RewriteCond条件下使用%{REQUEST_METHOD}的方法; 这样的事情可能会解决问题:

RewriteCond %{REQUEST_METHOD} !=POST

当然, RewriteRule是所需的RewriteRule ,可将所有内容重定向到非POST页面。

我目前无法进行测试,因此这可能并不完美,但是类似的事情可能可以解决问题-或至少可以指导您找到解决方案:

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

的想法

  • 匹配一切
  • 重定向到匹配的内容
  • 保留查询字符串(QSA标志)
  • 并使用301代码重定向
  • 然后停在那里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM