Лучшая коллекция кода для вашего файла .htaccess

1 июн. 2011 г., 19:49:49
Просмотры: 18.8K
Голосов: 65

У нас есть Лучшая коллекция кода для вашего файла functions.php, поэтому я подумал, что будет полезно создать аналогичную тему для наших файлов .htaccess.

И ПОЖАЛУЙСТА, НЕ ЗАБЫВАЙТЕ ДОБАВЛЯТЬ СВОИ СОБСТВЕННЫЕ СНИППЕТЫ В ЭТОТ СПИСОК

2
Комментарии

Отличная идея. Конечно, модераторы должны сделать это вики-сообществом. Также было бы полезно (по крайней мере, для меня), если бы при публикации ответов давалось четкое объяснение, что именно изменяется и как это работает.

Ray Mitchell Ray Mitchell
1 июн. 2011 г. 20:47:23

Сделано вики. Также, пожалуйста, перенесите ваш первый фрагмент кода в ответ.

Rarst Rarst
2 июн. 2011 г. 00:43:26
Все ответы на вопрос 7
6
23

Вот 3 сниппета для улучшения производительности, соответствующие рекомендациям Yahoo!:

Отключение Etags:

Header unset ETag
FileETag None

Добавление заголовков Expires:

<FilesMatch "\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Tue, 16 Jun 2020 20:00:00 GMT"
</FilesMatch>

Или

ExpiresActive On
ExpiresByType text/html "access plus 1 day"
ExpiresByType image/gif "access plus 10 years"
ExpiresByType image/jpeg "access plus 10 years"
ExpiresByType image/png "access plus 10 years"
ExpiresByType text/css "access plus 10 years"
ExpiresByType text/javascript "access plus 10 years"
ExpiresByType application/x-javascript "access plus 10 years"

Сжатие текстовых файлов:

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

Подробнее об этом можно прочитать здесь.

Обновлено:

Перенаправление запросов на домен с www

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

Блокировка запросов к xmlrpc.php

Используйте это только если вы не используете удаленную публикацию, так как это может предотвратить взлом вашего блога.

RewriteRule ^(.*)xmlrpc\.php$ http://www.domain.tld [R=301,L]

Перенаправление всех RSS-лент на Feedburner

RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/feed_uri [R=301,NC,L]
2 июн. 2011 г. 05:16:31
Комментарии

Я по-прежнему считаю, что рекомендация Yahoo исходит из неспособности Yahoobot использовать HTTP 1.1. Проверка Entity tags — это не то же самое, что проверка Last-Modified.

fuxia fuxia
2 июн. 2011 г. 08:36:10

Не удаляйте ETags просто так, они могут быть полезны, это зависит от многих факторов.

Wyck Wyck
3 июн. 2011 г. 02:13:43

@toscho & @Wyck: Можете объяснить про Etag? Я вижу, что все руководства по веб-производительности рекомендуют это. В чем проблема с этим?

Anh Tran Anh Tran
3 июн. 2011 г. 05:16:42

@rilwis ETag предназначен для строгой валидации: Например, изменённый виджет не меняет Last-Modified, но изменяет ETag. Смотрите также Руководство по кэшированию.

fuxia fuxia
3 июн. 2011 г. 08:50:21

@toscho: хорошее замечание про ETag vs Last-Modified. Спасибо :)

Anh Tran Anh Tran
3 июн. 2011 г. 09:23:00

В IE 9 возобновление загрузки требует наличия ETag.

fuxia fuxia
6 июн. 2011 г. 22:49:31
Показать остальные 1 комментариев
3
13

Улучшенные правила перезаписи для постоянных ссылок WordPress

По умолчанию WordPress отправляет HTML-страницу 404 для отсутствующих изображений и таблиц стилей — они никогда не отображаются браузером. И он перехватывает ваши символические ссылки.

# Изображениям, CSS и другим файлам не нужна HTML-страница 404
RewriteCond %{REQUEST_URI} !.+\.\w{2,4}$
# Существующий файл
RewriteCond %{REQUEST_FILENAME} !-f
# Существующая директория
RewriteCond %{REQUEST_FILENAME} !-d
# Символическая ссылка
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ index.php [L]
2 июн. 2011 г. 02:19:31
Комментарии

Мне интересно, как это будет работать в конфигурации мультисайта?

Dan Gayle Dan Gayle
2 июн. 2011 г. 20:06:15

@DanGayle Никакой разницы нет. Код для внутреннего перенаправления всего на index.php остаётся таким же.

fuxia fuxia
2 июн. 2011 г. 20:09:06

Отлично работает!

Benson Benson
7 июл. 2020 г. 00:42:04
0

Некоторые базовые настройки безопасности.

# ограничить индексацию директорий
Options All -Indexes

# защита файла .htaccess,
# это обычно включено в конфигурации Apache по умолчанию,
# но лучше перестраховаться.
<files .htaccess>
order allow,deny
deny from all
</files>

# отключить подпись сервера
ServerSignature Off

# ограничить загрузку файлов до 10 МБ
LimitRequestBody 10240000

# защитить wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# Ограничить доступ к логинам и админке по IP
# этот блок нужно размещать в .htaccess папки /admin, а не в корневой
<Limit GET POST PUT>
order deny,allow
deny from all
allow from xx.xx.xx.xx  //( ваш статический IP)
</Limit>    

# блокировать вредоносные строки запросов (хакеры/боты), учтите, это может сломать некоторые плагины
# ЭКСПЛУАТАЦИЯ ЧЕРЕЗ СТРОКИ ЗАПРОСА
<IfModule mod_rewrite.c>
 RewriteCond %{QUERY_STRING} \.\.\/    [NC,OR]
 RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
 RewriteCond %{QUERY_STRING} tag\=     [NC,OR]
 RewriteCond %{QUERY_STRING} ftp\:     [NC,OR]
 RewriteCond %{QUERY_STRING} http\:    [NC,OR]
 RewriteCond %{QUERY_STRING} https\:   [NC,OR]
 RewriteCond %{QUERY_STRING} mosConfig [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|'|"|;|\?|\*).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(globals|encode|config|localhost|loopback).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC]
 RewriteRule ^(.*)$ - [F,L]
</IfModule>
2 июн. 2011 г. 19:00:43
0

Сжатие GZip

Сжатие GZip

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css  application/x-javascript
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>
2 июн. 2011 г. 19:49:54
2

Редиректы и красивые постоянные ссылки без mod_rewrite

# - скрипт-кидди

Redirect permanent /admin.php http://localhost
Redirect permanent /_vti_bin http://localhost
Redirect permanent /css http://localhost
Redirect permanent /site http://localhost
Redirect permanent /s/ http://localhost
Redirect permanent /v/ http://localhost
Redirect permanent /html http://localhost
Redirect permanent /stil http://localhost
Redirect permanent /wp-content/cache.php http://localhost


# - глупые боты

Redirect permanent /sitemap.gz /sitemap.xml.gz
Redirect permanent /default.htm /
Redirect permanent /feeds/posts/default /feed/

# Укорачивание URL

RedirectMatch Permanent ^/page/$ /
# /category/ и /comments/ в оглавление
RedirectMatch Permanent ^/(category|comments)/$ /uebersicht/

# Только для Git! :)
RedirectMatch Permanent \.(svn|cvs|SVN|CVS|bzr) http://localhost

# Боты, ищущие мобильные версии
# см. http://perishablepress.com/press/2010/04/26/stop-404-requests-for-mobile-versions-of-your-site/#comment-78105
RedirectMatch gone /mobi(le)?($|/)
RedirectMatch gone /iphone($|/)

# - 410 (Удалено навсегда)

# Старые ленты мертвы
Redirect gone /2008/feed/
Redirect gone /2009/feed/
Redirect gone /2010/feed/

# снова глупые боты и браузеры

Redirect gone /crossdomain.xml
Redirect gone /labels.rdf
Redirect gone /.well-known
Redirect gone /parent-page
RedirectMatch gone .*/config$

# Красивые постоянные ссылки без mod_rewrite!
ErrorDocument 404 /index.php
2 июн. 2011 г. 01:53:52
Комментарии

Этот способ быстрее? Мне интересно, есть ли какие-то преимущества в таком подходе

Dan Gayle Dan Gayle
2 июн. 2011 г. 19:59:14

@DanGayle mod_rewrite работает с регулярными выражениями и поэтому немного медленнее. Но вы не можете использовать дополнительные правила, которые нужны в мультисайтовой настройке.

fuxia fuxia
2 июн. 2011 г. 20:12:07
1

ОШИБКИ

#Отображать email администратора в сообщениях об ошибках
SetEnv SERVER_ADMIN info@yoursite.com

#запретить хотлинкинг изображений с выводом ошибки или кастомного изображения
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yoursite.com/.*$ [NC]
#RewriteRule \.(gif|jpg|png)$ – [F]
#RewriteRule \.(gif|jpg|png)$ http://www.yoursite.com/wp-content/uploads/2011/04/bracker_thou_shalt_not_steal24.jpg [R,L]

#блокировка рефереров с определенных доменов
#RewriteEngine on
#RewriteCond %{HTTP_REFERER} digg\.com [NC]
#RewriteRule .* – [F]

#Удалить /category/ из URL WordPress
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]

#Перенаправление посетителей на страницу техобслуживания
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]

#автоматическое исправление орфографических ошибок в URL
<IfModule mod_speling.c>
CheckSpelling On
</IfModule>

#улучшенный вход в систему
RewriteRule ^login$ http://example.com/wp-login.php [NC,L]
14 июн. 2011 г. 05:43:08
Комментарии

Эй, круто. Не знал про модуль mod_speling. Должно быть полезно!

Dan Gayle Dan Gayle
14 июн. 2011 г. 20:19:31
0

Это более безопасное решение, надеюсь, оно вам понравится

# НАЧАЛО кэширования браузера в Wordpress
<IfModule mod_mime.c>
    AddType text/css .css
    AddType application/x-javascript .js
    AddType text/x-component .htc
    AddType text/html .html .htm
    AddType text/richtext .rtf .rtx
    AddType image/svg+xml .svg .svgz
    AddType text/plain .txt
    AddType text/xsd .xsd
    AddType text/xsl .xsl
    AddType text/xml .xml
    AddType video/asf .asf .asx .wax .wmv .wmx
    AddType video/avi .avi
    AddType image/bmp .bmp
    AddType application/java .class
    AddType video/divx .divx
    AddType application/msword .doc .docx
    AddType application/vnd.ms-fontobject .eot
    AddType application/x-msdownload .exe
    AddType image/gif .gif
    AddType application/x-gzip .gz .gzip
    AddType image/x-icon .ico
    AddType image/jpeg .jpg .jpeg .jpe
    AddType application/vnd.ms-access .mdb
    AddType audio/midi .mid .midi
    AddType video/quicktime .mov .qt
    AddType audio/mpeg .mp3 .m4a
    AddType video/mp4 .mp4 .m4v
    AddType video/mpeg .mpeg .mpg .mpe
    AddType application/vnd.ms-project .mpp
    AddType application/x-font-otf .otf
    AddType application/vnd.oasis.opendocument.database .odb
    AddType application/vnd.oasis.opendocument.chart .odc
    AddType application/vnd.oasis.opendocument.formula .odf
    AddType application/vnd.oasis.opendocument.graphics .odg
    AddType application/vnd.oasis.opendocument.presentation .odp
    AddType application/vnd.oasis.opendocument.spreadsheet .ods
    AddType application/vnd.oasis.opendocument.text .odt
    AddType audio/ogg .ogg
    AddType application/pdf .pdf
    AddType image/png .png
    AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx
    AddType audio/x-realaudio .ra .ram
    AddType application/x-shockwave-flash .swf
    AddType application/x-tar .tar
    AddType image/tiff .tif .tiff
    AddType application/x-font-ttf .ttf .ttc
    AddType audio/wav .wav
    AddType audio/wma .wma
    AddType application/vnd.ms-write .wri
    AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw
    AddType application/zip .zip
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css A31536000
    ExpiresByType application/x-javascript A31536000
    ExpiresByType text/x-component A31536000
    ExpiresByType text/html A3600
    ExpiresByType text/richtext A3600
    ExpiresByType image/svg+xml A3600
    ExpiresByType text/plain A3600
    ExpiresByType text/xsd A3600
    ExpiresByType text/xsl A3600
    ExpiresByType text/xml A3600
    ExpiresByType video/asf A31536000
    ExpiresByType video/avi A31536000
    ExpiresByType image/bmp A31536000
    ExpiresByType application/java A31536000
    ExpiresByType video/divx A31536000
    ExpiresByType application/msword A31536000
    ExpiresByType application/vnd.ms-fontobject A31536000
    ExpiresByType application/x-msdownload A31536000
    ExpiresByType image/gif A31536000
    ExpiresByType application/x-gzip A31536000
    ExpiresByType image/x-icon A31536000
    ExpiresByType image/jpeg A31536000
    ExpiresByType application/vnd.ms-access A31536000
    ExpiresByType audio/midi A31536000
    ExpiresByType video/quicktime A31536000
    ExpiresByType audio/mpeg A31536000
    ExpiresByType video/mp4 A31536000
    ExpiresByType video/mpeg A31536000
    ExpiresByType application/vnd.ms-project A31536000
    ExpiresByType application/x-font-otf A31536000
    ExpiresByType application/vnd.oasis.opendocument.database A31536000
    ExpiresByType application/vnd.oasis.opendocument.chart A31536000
    ExpiresByType application/vnd.oasis.opendocument.formula A31536000
    ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
    ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
    ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
    ExpiresByType application/vnd.oasis.opendocument.text A31536000
    ExpiresByType audio/ogg A31536000
    ExpiresByType application/pdf A31536000
    ExpiresByType image/png A31536000
    ExpiresByType application/vnd.ms-powerpoint A31536000
    ExpiresByType audio/x-realaudio A31536000
    ExpiresByType image/svg+xml A31536000
    ExpiresByType application/x-shockwave-flash A31536000
    ExpiresByType application/x-tar A31536000
    ExpiresByType image/tiff A31536000
    ExpiresByType application/x-font-ttf A31536000
    ExpiresByType audio/wav A31536000
    ExpiresByType audio/wma A31536000
    ExpiresByType application/vnd.ms-write A31536000
    ExpiresByType application/vnd.ms-excel A31536000
    ExpiresByType application/zip A31536000
</IfModule>
<IfModule mod_deflate.c>
    <IfModule mod_setenvif.c>
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    </IfModule>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/css application/x-javascript text/x-component text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon
    </IfModule>
</IfModule>
<FilesMatch "\.(css|js|htc|CSS|JS|HTC)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|SVG|SVGZ|TXT|XSD|XSL|XML)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip|ASF|ASX|WAX|WMV|WMX|AVI|BMP|CLASS|DIVX|DOC|DOCX|EOT|EXE|GIF|GZ|GZIP|ICO|JPG|JPEG|JPE|MDB|MID|MIDI|MOV|QT|MP3|M4A|MP4|M4V|MPEG|MPG|MPE|MPP|OTF|ODB|ODC|ODF|ODG|ODP|ODS|ODT|OGG|PDF|PNG|POT|PPS|PPT|PPTX|RA|RAM|SVG|SVGZ|SWF|TAR|TIF|TIFF|TTF|TTC|WAV|WMA|WRI|XLA|XLS|XLSX|XLT|XLW|ZIP)$">
    <IfModule mod_headers.c>
        Header set Pragma "public"
        Header append Cache-Control "public, must-revalidate, proxy-revalidate"
    </IfModule>
    FileETag MTime Size
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.4"
    </IfModule>
</FilesMatch>
# КОНЕЦ кэширования браузера в Wordpress
# НАЧАЛО ядра кэширования страниц Wordpress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(.*\/)?Wordpress_rewrite_test$ $1?Wordpress_rewrite_test=1 [L]
    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteRule .* - [E=Wordpress_ENC:_gzip]
    RewriteCond %{REQUEST_METHOD} !=POST
    RewriteCond %{QUERY_STRING} =""
    RewriteCond %{HTTP_HOST} =hubtank.com
    RewriteCond %{REQUEST_URI} !(\/wp-admin\/|\/xmlrpc.php|\/wp-(app|cron|login|register|mail)\.php|\/feed\/|wp-.*\.php|index\.php) [NC,OR]
    RewriteCond %{REQUEST_URI} (wp-comments-popup\.php|wp-links-opml\.php|wp-locations\.php) [NC]
    RewriteCond %{HTTP_COOKIE} !(comment_author|wp-postpass|wordpress_\[a-f0-9\]\+|wordpress_logged_in) [NC]
    RewriteCond %{HTTP_USER_AGENT} !(W3\ Total\ Cache/0\.9\.2\.4) [NC]
    RewriteCond "%{DOCUMENT_ROOT}/wp-content/Wordpress/pgcache/%{REQUEST_URI}/_index%{ENV:Wordpress_UA}%{ENV:Wordpress_REF}%{ENV:Wordpress_SSL}.html%{ENV:Wordpress_ENC}" -f
    RewriteRule .* "/wp-content/Wordpress/pgcache/%{REQUEST_URI}/_index%{ENV:Wordpress_UA}%{ENV:Wordpress_REF}%{ENV:Wordpress_SSL}.html%{ENV:Wordpress_ENC}" [L]
</IfModule>
# КОНЕЦ ядра кэширования страниц Wordpress
# НАЧАЛО WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
27 янв. 2012 г. 22:48:37