2015-05-23 4 views
0

Продолжения: Setting response headers with middleware in Lumenзаголовка ответа дублирован (люмен)

При использовании следующего обработчика исключений в люменах, заголовок X-Powered-By дублируются, даже если $replace (третий параметр метода header()) по умолчанию TRUE (даже настройки он вручную, как показано ниже, не работает).

public function render($request, Exception $e) 
{ 
    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) 
    { 
     return response(view('not-found'), 404)->header('X-Powered-By', env('APP_NAME')."/".env('APP_VER'), true); 
    } 

    return parent::render($e); 
} 

Заголовок ответа:

HTTP/1.0 404 Not Found 
Date: Sat, 23 May 2015 08:05:13 GMT 
Server: Apache 
X-Powered-By: PHP/5.6.3 
Cache-Control: no-cache 
X-Powered-By: AppName/1.0.0 
Connection: close 
Content-Type: text/html; charset=UTF-8 

Единственное, что работает, чтобы использовать header_remove('X-Powered-By') непосредственно перед вызовом ->header. Я не должен был этого делать, поскольку параметр $replace устанавливается соответствующим образом.

Есть ли лучшие способы предотвратить дублирование заголовка X-Powered-By?

ответ

0

я не мог получить эту работу с помощью метода логического вывода, однако, если бы я сделал это:

header('X-Powered-By: '.env('APP_NAME')."/".env('APP_VER')); 
return response(view('not-found'), 404); 

... он работал так, как вам хочется. Но, пожалуйста, внимание есть только один аргумент в заголовке в РНР инструкции:

void header (string $string [, bool $replace = true [, int $http_response_code ]]) 

Дополнительный заменить параметр указывает, должен ли заголовок заменить предыдущий подобный заголовок, или добавить второй заголовок одного и того же type. По умолчанию он заменит, но если вы передадите FALSE в качестве второго аргумента , вы можете заставить несколько заголовков одного типа.

Источник: http://php.net/manual/en/function.header.php

... смысл, это не "заменить это, что" тип элемента, как str_replace. Если строка, которую вы вводите в первый аргумент, похожа на другой элемент заголовка, она заменит его на все, что вы набрали автоматически.

Замечание: Я также попытался установить третий аргумент функции ответа массиву, включая заголовок X-Powered-By, безрезультатно.

0

Set

 
expose_php = Off 

в вашем php.ini, чтобы удалить

 
X-Powered-By: PHP/5.6.3 

expose_php

+0

Я знаю, что могу это сделать, но почему исходный заголовок не заменяется? Конечно, он отправляется * перед * моим вызовом 'header()'? Если я делаю это с '.htaccess', он работает. –

Смежные вопросы