php para htaccess reescrever - redirecionamento se há dados _POST $
-
22-07-2019 - |
Pergunta
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;
}
Pode esta funcionalidade ser reescrita com regras .htaccess?
Logic:
Se não for um pedido POST, redirecionamento para páginas equivalentes com string de consulta inteira através da emissão de 301 cabeçalho e status, mantendo protocolo.
Solução
Tente isto:
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{SERVER_PORT}s ^443(s)|.*
RewriteRule ^foo/bar$ http%1://www.example.com%{REQUEST_URI} [L,R=301]
Não basta substituir 443
pelo seu valor SERVER_HTTPS_PORT
e www.example.com
pelo seu valor CLIENT_DOMAIN
.
Outras dicas
Isso deve funcionar para você (substitua www.google.com
com o seu 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]
lookink a documentação do Apache mod_rewrite , há pode ser uma maneira, usando %{REQUEST_METHOD}
em uma condição RewriteCond
; algo como isso poderia fazer o truque:
RewriteCond %{REQUEST_METHOD} !=POST
seguido, é claro, pela RewriteRule
necessário para redirecionamento tudo para a página non-POST.
Eu não tenho nenhuma maneira de testar agora, então isso pode não ser perfeito, mas algo como isto talvez pudesse fazer o truque - ou, pelo menos, guiá-lo para a solução:
RewriteRule ^(.*)$ $1 [QSA,R=301,L]
A idéia beeing a
- jogo tudo
- redirecionamento para o que foi combinado
- manter a seqüência de consulta (bandeira QSA)
- e redirecionar com um código de 301
- e parar por aí