簡體   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