2009-08-04 7 views
2
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

はこれを試してみてください:

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

ないあなたは自分のCLIENT_DOMAIN値によって、あなたのSERVER_HTTPS_PORT値とwww.example.com443を交換する必要があります。

0

Apacheのmod_rewriteのドキュメントを参照すると、RewriteCondの条件で%{REQUEST_METHOD}を使用する方法がある可能性があります。非POSTページにすべてをリダイレクトするために必要なRewriteRuleによって、当然のことながら、

RewriteCond %{REQUEST_METHOD} !=POST 

続か:このような何かはトリックを行う可能性があります。

私は今、テストの方法がありませんので、これは完璧ではないかもしれませんが、このようなものは、おそらくトリックを行う可能性が - 少なくとも、または、ソリューションをご案内:

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

クエリ文字列(QSAフラグを)維持

  • をマッチしたものに

    • 試合すべて
    • リダイレクトにbeeingてアイデア
    • と301コード
    • にリダイレクトし、これはあなたのために働く(あなたCLIENT_DOMAINwww.google.comを交換する)必要があります
  • +0

    あなたのソリューションはサーバーポートと一致せず、 'CLIENT_DOMAIN'ではなく同じサイトにリダイレクトされます。 – RaYell

    +0

    私が言ったように、それは完全な解決策ではありませんでした。他の人が助けてくれるのを待っている間に、OPのチャンスを導くためのアイデアのカップルが増えました:-) –

    2

    が停止します。

    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] 
    
    関連する問題