Перезапись php в htaccess – перенаправление, если нет данных $_POST
-
22-07-2019 - |
Вопрос
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]
не просто надо заменить 443
По вашему SERVER_HTTPS_PORT
ценность и www.example.com
По вашему CLIENT_DOMAIN
ценить.
Другие советы
Это должно работать для вас (замените 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, может быть способ использовать %{REQUEST_METHOD}
в RewriteCond
состояние ;что-то вроде этого может помочь:
RewriteCond %{REQUEST_METHOD} !=POST
После этого, конечно же, необходимо RewriteRule
чтобы перенаправить все на страницу, отличную от POST.
У меня сейчас нет возможности протестировать, так что это может быть не идеально, но что-то вроде этого может помочь или, по крайней мере, приведет вас к решению:
RewriteRule ^(.*)$ $1 [QSA,R=301,L]
Идея заключалась в том, чтобы
- соответствовать всему
- перенаправить на то, что было сопоставлено
- сохранение строки запроса (флаг QSA)
- и перенаправление с кодом 301
- и останавливаюсь там