2015-08-07 3 views
1

Я пытаюсь создать перенаправление и кеширование с файлом .htaccess. Вот мой код:.htaccess генерирует статус ошибки 500

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

<ifModule mod_headers.c> 
    ExpiresActive On 
    ExpiresDefault A86400 

<FilesMatch "\.(ico|gif|jpg|jpeg\png|flv|pdf|swf|mov|mp3|wmv|ppt)$"> 
    ExpiresDefault A1814400 
    Header append Cache-Control "public" 
</FilesMatch> 

<FilesMatch "\.(xml|txt|html)$"> 
ExpiresDefault A259200 
Header append Cache-Control "proxy-revalidate" 
</FilesMatch> 

<FilesMatch "\.(js|css)$> 
ExpiresDefault A10800 
Header append Cache-Control "proxy-revalidate" 
</FilesMatch> 

<FilesMatch "\.(php|cgi|pl)$"> 
ExpiresDefault A0 
Header set Cache-Control "no-store, no-cache, must revalidate, max-age=0" 
Header set Pragma "no-cache" 
</FilesMatch> 
</ifModule> 

<ifModule mod_deflate.c> 
<FilesMatch "\.(js|css|html|htm|php|xml)$"> 
SetOutputFilter DEFLATE 
</FilesMatch> 
</IfModule> 

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)(\.gz)?$"> 
Header unset ETag 
FileETag None 
</FilesMatch> 

Если удалить все кэширование, и оставить только первые три строки, он отлично работает, но без кэширования:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

Что я делаю не так?

+1

Просмотрите файл журнала ошибок http-серверов. Здесь записываются ошибки во время выполнения. Нет смысла пытаться _guess_, что такое ошибка _might_, если вы можете просто прочитать ее. – arkascha

+0

Ошибка в этой ошибке в журнале ошибок –

+0

. Статус http 500, безусловно, создаст запись в файле журнала ошибок. Может быть, вы смотрите на неправильный файл? Имейте в виду, что существуют разные типы файлов журналов, а также могут быть несколько файлов журнала ошибок, например, для отдельных узлов внутри вашего HTTP-сервера. – arkascha

ответ

1

«Regex не может быть составлен»

<FilesMatch "\.(ico|gif|jpg|jpeg\png|flv|pdf|swf|mov|mp3|wmv|ppt)$"> 

У вас есть \p маркер (используется для проверки соответствия Unicode кодовых точек и, казалось бы, не может быть поддержано в Apache конфигурации?) - выглядит как опечатка - это должно быть |p (pipe-p).

Я просто попробовал это на своем собственном сервере (Apache 2.4) и получил ту же ошибку.

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