htaccess yeniden yazmak için php - yönlendirme olursa $ _POST veri

3 Cevap php
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;
}

Bu işlevsellik. Htaccess kuralları ile yazılabilir miyim?

Mantık:

Değil bir POST isteği ise, protokol korurken, 301 başlık ve durum yayımlayarak tüm sorgu dizesi ile eşdeğer sayfaya yönlendirme.

3 Cevap

Bu deneyin:

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

Sadece CLIENT_DOMAIN değerine göre SERVER_HTTPS_PORT değeri ve www.example.com ile 443 değiştirmeniz gerekmez.

Bu, (sizin CLIENT_DOMAIN ile www.google.com olarak değiştirin) sizin için çalışması gerekir.

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]

Lookink Apache ait belgelere mod_rewrite, bir RewriteCond durumda %{REQUEST_METHOD} kullanarak, bir yolu olabilir; böyle bir şey hile yapabilir:

RewriteCond %{REQUEST_METHOD} !=POST

Tarafından, tabii ki, ardından RewriteRule non-POST sayfa için her şeyi yönlendirmek gerekiyordu.

Ben şu anda test hiçbir yolu yoktur, bu yüzden mükemmel olmayabilir, ama bu böyle bir şey belki hile yapabilir - ya da, en azından, çözüm için size rehberlik:

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

Fikir beeing

  • her şeyi karşılayan
  • eşleşen ne yönlendirmek
  • Sorgu dize tutarak (QSA bayrak)
  • ve 301, bir kod ile yönlendirme
  • ve orada durdurma