php to htaccess переписать - перенаправить, если нет данных $ _POST - PullRequest
2 голосов
/ 04 августа 2009
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, сохранив протокол.

Ответы [ 3 ]

3 голосов
/ 04 августа 2009

Попробуйте это:

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.

2 голосов
/ 04 августа 2009

Это должно работать для вас (замените 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]
0 голосов
/ 04 августа 2009

Посмотрите на документацию Apache mod_rewrite , может быть способ использовать %{REQUEST_METHOD} в состоянии RewriteCond; что-то вроде этого может помочь:

RewriteCond %{REQUEST_METHOD} !=POST

За этим, разумеется, следует RewriteRule, чтобы перенаправить все на страницу без POST.

У меня нет возможности сейчас тестировать, так что это может быть не идеально, но что-то вроде этого может помочь, или, по крайней мере, привести вас к решению:

RewriteRule ^(.*)$ $1 [QSA,R=301,L]

Идея

  • соответствует всему
  • перенаправление на то, что было найдено
  • сохранение строки запроса (флаг QSA)
  • и перенаправление с кодом 301
  • и остановка там
...