[英]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]
的想法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.