Перезапись php в htaccess – перенаправление, если нет данных $_POST

StackOverflow https://stackoverflow.com/questions/1226905

Вопрос

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
  • и останавливаюсь там
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top