Оглавление
- 1 Перенаправление с одного домена на другой в .htaccess
- 1.1 Оптимальный .htaccess для WordPress
- 1.1.1 1) Закроем листинг файлов и папок:
- 1.1.2 2) Включим mod_rewrite:
- 1.1.3 3) Теперь добавим блок настроек безопасности:
- 1.1.4 4) Укажем редиректы, если это необходимо:
- 1.1.5 5) Настроим gzip-сжатие:
- 1.1.6 6) Настроим кеширование и время актуальности кеша:
- 1.1.7 7) Настроим параметры mod_headers (Vary: Accept-Encoding)
- 1.1.8 8) Защищаем от несанкционированного доступа файл wp-config.php:
- 1.1.9 9) Защищаем от доступа сам файл .htaccess:
- 1.1.10 10) Добавим правильную кодировку по умолчанию:
- 1.1.11 11) Перенаправление на домен без www:
- 1.1.12 12) Перенаправление с домена без www на адрес с www:
- 1.2 Убрать лишний index.php из .htaccess
- 1.3 1. Запрещаем загрузку файлов с внешних сайтов
- 1.4 2. Блокируем все запросы от нежелательных User Agents
- 1.5 3. Запрещаем доступ для всех, кроме указанных IP-адресов
- 1.6 4. Настраиваем SEO-Friendly 301 Redirect
- 1.7 5. Создаем собственные страницы ошибок
- 1.8 6. Создаем черный список IP адресов
- 1.9 7. Устанавливаем e-mail адрес по-умолчанию для администратора сервера
- 1.10 8. Защищаем определенный файл
- 1.11 9. Сжимаем элементы с помощью mod_deflate
- 1.12 10. Добавляем срок жизни в заголовки
- 1.13 11. Устанавливаем страницы по-умолчанию
- 1.14 12. Защищаем паролем папки и файлы
- 1.15 13. Перенаправляем со старого домена — на новый
- 1.16 14. Усиливаем кеширование
- 1.17 15. Сжимаем компоненты сайта путем включения Gzip
- 1.18 16. Удаляем «category» из URL
- 1.19 17. Запрещаем просмотр содержимого папки
- 1.20 18. Перенаправляем RSS-ленту WordPress на FeedBurner
- 1.21 19. Запрещаем комментарии от пользователей без Referrer
- 1.22 20. Убираем расширение файла из URL
- 1.23 21. Защищаем сайт
- 1.24 22. Перенаправляем посетителя с помощью директивы RedirectMatch и регулярных выражений
- 1.25 23. Устанавливаем редирект для URL с GET параметрами
- 1.26 24. Включение PHP в .html файлах
- 1.1 Оптимальный .htaccess для WordPress
Настраивал обновление прайсов по крону в одном из агрегаторов и возникла проблема 500 ошибки. Файл прайса сохранялся на сервере, но скачивать не получалось. Будь то из медиа библиотеки. Папка скачивания была одна — /wp-content/uploads/
Ни xls, ни csv, ни даже xml не скачивался. Показывалась 500 internal server error.
Оказалось, что в каталоге /wp-content/uploads/ лежал файл .htaccess с интересным содержимым.
Как я узнал, что проблема была в htaccess? Посмотрел логи сервера, где явно указывалась проблема с htaccess и регулярным выражением внутри файла:
[code] [Thu Jul 20 23:36:15 2017] [alert] [client -.-.-.-:20510] /public_html/wp-content/uploads/.htaccess: RewriteRule: cannot compile regular expression ‘^(.*(-250×250|(-250×250|-768x([\\d]+)|-([1-6][\\d]{1,2}|[\\d]{1,2})x1024|-600x([1-1][\\d]{1,3}|[\\d]{1,2})|(-250×250|-([1-3][\\d]{1,2}|[\\d]{1,2})x300|-300x([1-3][\\d]{1,2}|[\\d]{1,2})|(-250×250)\\.jpg|.*(?<!-\\dx\\d)(?<!-\\d\\dx\\d)(?<!-\\dx\\d\\d)(?<!-\\d\\dx\\d\\d)(?<!-\\d\\d\\dx\\d\\d)(?<!-\\d\\dx\\d\\d\\d)(?<!-\\d\\d\\dx\\d\\d\\d)(?<!-\\d\\d\\d\\dx\\d\\d\\d)(?<!-\\d\\d\\d\\dx\\d\\d)(?<!-\\d\\d\\dx\\d\\d\\d\\d)(?<!-\\d\\d\\d\\dx\\d\\d\\d\\d)(?<!-\\d\\d\\d\\dx\\d\\d\\d)(?<!-\\d\\d\\d\\dx\\d\\d)(?<!-\\d\\d\\d\\d\\dx\\d\\d\\d\\d\\d)\\.jpg){1}((\\?|\\&)([^\\.\\?\\ ]+))*$’ [/code]Именно это и было написано в mod_rewrite.c
Решил не разбираться с выражением и просто закомментил файл.
Теперь яндекс маркет получит наш прайс к себе в базу 🙂
Популярные настройки htaccess
Список htaccess-настроек, которые я использую на своих новых проектах. Здесь собран список для решения основных и популярных задач по настройкам.
Основы.htaccess на примерах
http://habrahabr.ru/post/31054/
Перенаправление домена с www на без-www
Options +FollowSymLinks |
Чуть более понятный синтаксис
Options +FollowSymLinks или RewriteCond %{HTTP_HOST} ^(www\.)+(.*) [NC] RewriteRule ^(.*)$ http://%2%{REQUEST_URI} [R=301,L] |
Редирект запросов без-www на домен с www префиксом
Options +FollowSymLinks |
или же альтернативный вариант:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
или
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
301 редирект старого домена на новый:
Options +FollowSymLinks |
Если хотите чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:
RewriteEngine on |
Для замены всех .htm файлов .html файлами:
RewriteEngine on Redirect 302 /buy/ http://allsiding.ru/map/ Редирект с http на httpsserver { RewriteEngine On https://www.ssllabs.com/ssltest/ RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] Перенаправление с одного домена на другой в .htaccess<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC] RewriteRule ^([^/]+) $1 [L] RewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.ru$ RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L] </IfModule> |
301 редирект через PHP
Вся суть 301 редиректа через PHP, ASP, JavaScript в передаче клиенту заголовков:
HTTP/1.1 301 Moved Permanently |
Для этого, например, в PHP используем:
<?php |
Данный код лучше всего вставлять в начало PHP скрипта чтобы до него ничего не выводилось (echo или print). За пояснение спасибо автору этой статьи где также найдете информацию про установку редиректа на ASP, ColdFusion и т.п., просто с php самый популярный вариант.
Редирект с без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^cakestand.ru
RewriteRule (.*) http://www.cakestand.ru/$1 [R=301,L]
AddHandler application/x-httpd-php .php .html .htm
удаляет слэш на конце URL
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$ [NC]
RewriteRule ^(.*)(/)$ $1 [L,R=301]
слэш в конце URL
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Оптимальный .htaccess для WordPress
1) Закроем листинг файлов и папок:
Options +FollowSymLinks -Indexes
2) Включим mod_rewrite:
RewriteEngine On
3) Теперь добавим блок настроек безопасности:
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS (=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST (=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
# Deny access to php, xml and ini files
# within components and plugins directories
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} \.php|\.ini|\.xml [NC]
RewriteCond %{REQUEST_URI} \/components\/ [OR]
RewriteCond %{REQUEST_URI} ^\/includes\/|^\/administrator\/includes\/ [OR]
RewriteCond %{REQUEST_URI} \/language\/ [OR]
RewriteCond %{REQUEST_URI} \/libraries\/ [OR]
RewriteCond %{REQUEST_URI} \/modules\/ [OR]
RewriteCond %{REQUEST_URI} \/plugins\/ [OR]
RewriteCond %{REQUEST_URI} \/templates\/ [OR]
RewriteCond %{REQUEST_URI} \/xmlrpc\/
RewriteRule ^(.*)$ index.php [R=404,L]
# Prevent most common SQL-Injections
RewriteCond %{query_string} concat.*\( [NC,OR]
RewriteCond %{query_string} union.*select.*\( [NC,OR]
RewriteCond %{query_string} union.*all.*select [NC]
RewriteRule ^(.*)$ index.php [F,L]
# Block most common hacking tools
SetEnvIf user-agent «Indy Library» stayout=1
SetEnvIf user-agent «libwww-perl» stayout=1
SetEnvIf user-agent «Wget» stayout=1
deny from env=stayout
4) Укажем редиректы, если это необходимо:
RewriteRule .* — [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn’t directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn’t directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
5) Настроим gzip-сжатие:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript 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 mod_gzip.c>
mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$ </ifmodule>
</IfModule>
6) Настроим кеширование и время актуальности кеша:
<IfModule mod_expires.c>
ExpiresActive On# Default expiration: 1 hour after request
ExpiresDefault «now plus 1 hour»# CSS and JS expiration: 1 week after request
ExpiresByType text/css «now plus 1 week»
ExpiresByType application/javascript «now plus 1 week»
ExpiresByType application/x-javascript «now plus 1 week»# Image files expiration: 1 month after request
ExpiresByType image/bmp «now plus 1 month»
ExpiresByType image/gif «now plus 1 month»
ExpiresByType image/jpeg «now plus 1 month»
ExpiresByType image/jp2 «now plus 1 month»
ExpiresByType image/pipeg «now plus 1 month»
ExpiresByType image/png «now plus 1 month»
ExpiresByType image/svg+xml «now plus 1 month»
ExpiresByType image/tiff «now plus 1 month»
ExpiresByType image/vnd.microsoft.icon «now plus 1 month»
ExpiresByType image/x-icon «now plus 1 month»
ExpiresByType image/ico «now plus 1 month»
ExpiresByType image/icon «now plus 1 month»
ExpiresByType text/ico «now plus 1 month»
ExpiresByType application/ico «now plus 1 month»
ExpiresByType image/vnd.wap.wbmp «now plus 1 month»
ExpiresByType application/vnd.wap.wbxml «now plus 1 month»
ExpiresByType application/smil «now plus 1 month»# Audio files expiration: 1 month after request
ExpiresByType audio/basic «now plus 1 month»
ExpiresByType audio/mid «now plus 1 month»
ExpiresByType audio/midi «now plus 1 month»
ExpiresByType audio/mpeg «now plus 1 month»
ExpiresByType audio/x-aiff «now plus 1 month»
ExpiresByType audio/x-mpegurl «now plus 1 month»
ExpiresByType audio/x-pn-realaudio «now plus 1 month»
ExpiresByType audio/x-wav «now plus 1 month»# Movie files expiration: 1 month after request
ExpiresByType application/x-shockwave-flash «now plus 1 month»
ExpiresByType x-world/x-vrml «now plus 1 month»
ExpiresByType video/x-msvideo «now plus 1 month»
ExpiresByType video/mpeg «now plus 1 month»
ExpiresByType video/mp4 «now plus 1 month»
ExpiresByType video/quicktime «now plus 1 month»
ExpiresByType video/x-la-asf «now plus 1 month»
ExpiresByType video/x-ms-asf «now plus 1 month»
</IfModule>
7) Настроим параметры mod_headers (Vary: Accept-Encoding)
<IfModule mod_headers.c>
<FilesMatch «\.(js|css|xml|gz)$»>
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>
# BEGIN 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>
8) Защищаем от несанкционированного доступа файл wp-config.php:
<Files wp-config.php>
# Запрещаем всем доступ к файлу wp-config.php
order allow,deny
deny from all
</Files>
9) Защищаем от доступа сам файл .htaccess:
<Files .htaccess>
order allow,deny
deny from all
</Files>
10) Добавим правильную кодировку по умолчанию:
AddDefaultCharset utf-8
11) Перенаправление на домен без www:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Внимание: замените адрес site.ru на адрес вашего сайта!
12) Перенаправление с домена без www на адрес с www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.ru
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=permanent,L]
Внимание: замените адрес site.ru на адрес вашего сайта! Выберите только один вариант перенаправления: либо на www, либо на без www.
Редирект 301. Старая — Новая
Redirect 301 /kolomna/ /russia/moskowandoblast/kolomna/
Заменяем все ссылки с http на https
UPDATE wp_posts SET post_content = REPLACE(post_content, ‘http://VASH-DOMEN’, ‘https://VASH-DOMEN’);
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, ‘http://VASH-DOMEN’, ‘https://VASH-DOMEN’);
Убрать лишний index.php из .htaccess
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
Убедитесь в том, что вы сделали резервную копию оригинального файла .htaccess для вашего сайта, прежде чем вносить какие-либо изменения.
Кроме того, помните — работоспособность указанных ниже правил зависит от настроек вашего web-сервера, заданных хостером. Некоторые директивы могут быть запрещены и не работать.
.htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.
Файл .htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов .htaccess).
Для того чтобы эти файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы .htaccess.
1. Запрещаем загрузку файлов с внешних сайтов
Вам надоели люди, которые размещают картинки, опубликованные на вашем сайте — на своих ресурсах, тем самым расходуя ваш траффик и создавая ненужную нагрузку на ваш хостинг? Данный код, размещенный в конца вашего файла .htaccess, позволит предотвратить загрузку ваших изображений — сторонними сайтами.
1 2 3 4 5 6 | Options +FollowSymlinks #Запрещаем загрузку файлов с внешних сайтов RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ [nc] RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/stop_stealing_bandwidth.gif[nc] |
Не забудьте изменить domainname.com на ваше доменное имя и создать изображение stop_stealing_bandwidth.gif, которое будет показано вместо запрошенной картинки.
2. Блокируем все запросы от нежелательных User Agents
Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.
#Блокируем плохих ботов и роботов SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] <limit get=»» post=»» head=»»> Order Allow,Deny Allow from all Deny from env=bad_bot </limit> |
Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте List of User-Agents.
3. Запрещаем доступ для всех, кроме указанных IP-адресов
Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш .htaccess-файл:
1 2 3 4 5 6 | #Запрещаем доступ для всех, кроме указанных IP-адресов ErrorDocument 403 http://www.domainname.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123 |
Не забудьте изменить domainname.com на ваше доменное имя.
4. Настраиваем SEO-Friendly 301 Redirect
Если вы перенесли доменное имя или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:
1 2 | #Настраиваем SEO-Friendly 301 Redirect Redirect 301 /d/file.html http://www.domainname.com/r/file.html |
Не забудьте изменить domainname.com на ваше доменное имя, а /d/file.html и /r/file.html на соответствующие директории и страницы.
5. Создаем собственные страницы ошибок
Вам надоел стандартный вид страниц ошибок? Нет проблем — с помощью следующего кода, вы легко можете создать свою страницу и показывать пользователю именно ее:
1 2 3 4 | ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php |
Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.
6. Создаем черный список IP адресов
Устали от спам-комментариев или определенного пользователя? Просто заблокируйте его IP с помощью следующего кода, добавляемого в .htaccess-файл.
1 2 3 4 | #Создаем черный список IP адресов allow from all deny from 145.186.14.122 deny from 124.15. |
Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. Для WordPress, IP адреса комментаторов можно увидеть в административной панели.
7. Устанавливаем e-mail адрес по-умолчанию для администратора сервера
Используйте данный код, для того, чтобы установить e-mail адрес по-умолчанию для администратора сервера.
1 2 3 | #Устанавливаем e-mail адрес по-умолчанию для администратора сервера ServerSignature EMail SetEnv SERVER_ADMIN default@domain.com |
Не забудьте заменить default@domain.com — своим e-mail адресом.
8. Защищаем определенный файл
Нижеследующий код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. Для примере я закрыл доступ к самому файлу htaccess, повысив уровень безопасности сайта.
1 2 3 4 5 | #Защищаем .htaccess файл <files .htaccess> order allow,deny deny from all </files> |
9. Сжимаем элементы с помощью mod_deflate
В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно работает быстрее). Разместите следующий код в начале вашего файла .htaccess (также вы можете добавить .jpg|.gif|.png|.tiff|.ico):
1 2 3 4 5 6 | #Сжимаем элементы с помощью mod_deflate <ifmodule mod_deflate.c=»»> <filesmatch .(js|css)$=»»> SetOutputFilter DEFLATE </filesmatch> </ifmodule> |
10. Добавляем срок жизни в заголовки
Данный код позволяет добавить сроки жизни в заголовки:
1 2 3 4 | #Добавляем срок жизни в заголовки <filesmatch .(ico|pdf|flv|jpg|jpeg|png|gif|swf)$=»»> Header set Expires «Wed, 21 May 2010 20:00:00 GMT» </filesmatch> |
11. Устанавливаем страницы по-умолчанию
Обычно страницей по-умолчанию является index.html, однако с помощью этого кода вы можете настроить по-умолчанию любую другую страницу.
1 2 | #Устанавливаем альтернативную страницу по-умолчанию DirectoryIndex about.html |
12. Защищаем паролем папки и файлы
Вы можете включить проверку пароля для доступа в любую папку или файл на вашем сервере, используя этот код:
#защита паролем файла <files secure.php=»»> AuthType Basic AuthName «Prompt» AuthUserFile /pub/home/.htpasswd Require valid-user </files> #защита паролем папки resides AuthType basic AuthName «This directory is protected» AuthUserFile /pub/home/.htpasswd AuthGroupFile /dev/null Require valid-user |
Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл .htpasswd и внести в него пару логин-пароль в формате user:password.
Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы .htpasswd. Например, вот таким.
В нашем примере файл с паролями доступа лежит в корневой директории сайта и называется .htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том чилсе и тому, который ввел правильную пару логин:пароль.
13. Перенаправляем со старого домена — на новый
Используя .htaccess, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:
1 2 3 | #Перенаправляем со старого домена — на новый RewriteEngine On RewriteRule ^(.*)$ http://www.domainname.com/$1 [R=301,L] |
Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке http://www.olddomainname.com — будет перенаправлен на http://www.domainname.com
14. Усиливаем кеширование
Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя, путем отправки статуса 304 для тех элементов, которые не обновлялись. Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds). В примере указан 1 год.
#Усиливаем кеширование FileETag MTime Size <ifmodule mod_expires.c> <filesmatch «.(jpg|gif|png|css|js)$»> ExpiresActive on ExpiresDefault «access plus 1 year» </filesmatch> </ifmodule> |
15. Сжимаем компоненты сайта путем включения Gzip
При использовании Gzip, сервер будет сжимать файлы перед отправкой их пользователю, ввиду чего ваш сайт будет грузиться быстрее.
1 2 3 4 5 | #Сжимаем компоненты сайта путем включения Gzip AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript 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 |
Обратите внимание, что включение компрессии приведет к большей нагрузке на процессор сервера.
16. Удаляем «category» из URL
Для изменения ссылки http://yourdomain.com/category/blue на http://yourdomain.com/blue, просто добавьте следующий код в конце вашего .htaccess файла.
1 2 | #Удаляем category из URL RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1 [R=301,L] |
Не забудьте изменить http://www.yourdomain.com на ваше доменное имя.
17. Запрещаем просмотр содержимого папки
Для того, чтобы ограничить доступ к директориям, которые могут содержать разнообразную информацию и для обеспечения безопасности сервера, добавьте этот код в файл .htaccess
1 2 | #Запрещаем просмотр содержимого папки Options All -Indexes |
Update: Jack.Sun предложил альтернативное решение, имеющее такой же результат — разместить в каждой папке файл index.html. От себя добавлю, что этот метод будет работать только в том случае, если вы не изменяли страницу по-умолчанию (см. правило #11). В этим случае, необходимо размещать файлы с тем новым именем, которое было задано вами в качестве страницы по-умолчанию.
18. Перенаправляем RSS-ленту WordPress на FeedBurner
Этот код позволяет перенаправить RSS-ленту WordPress на сервис Google Feedburner.
#Перенаправляем RSS-ленту WordPress на FeedBurner <ifmodule mod_rewrite.c=»»> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^rss.xml$ http://feeds.feedburner.com/yourfeed [R=302,NC,L] </ifmodule> |
Изначально необходимо зарегистрировать ленту своего блога в сервисе Feedburner. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner.
19. Запрещаем комментарии от пользователей без Referrer
Чаще всего спам-боты обращаются напрямую к файлу wp-comments-post.php, не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google).
#Запрещаем комментарии от пользователей без Referrer RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] |
Не забудьте заменить yourblog.com на доменное имя вашего блога.
20. Убираем расширение файла из URL
Данный код позволяет удалить расширение файла .php (вы можете изменить его на любое другое, например — .html) из URL-адресов страниц.
1 2 | #Убираем расширение файла из URL RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L] |
21. Защищаем сайт
Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS
#Включаем отслеживание сим-ссылок Options +FollowSymLinks #Запускаем url_rewriting RewriteEngine On #Блокируем все ссылки, содержащие <script> RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] #Блокируем все скрипты, которые пытаются изменить переменные PHP Globals: RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] #Блокируем все скрипты, которые пытаются изменить переменную _REQUEST: RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) #Перенаправляем все подобные на страницу с ошибкой 403 — запрещено RewriteRule ^(.*)$ index.php [F,L] |
Источник: WPRecipes.
22. Перенаправляем посетителя с помощью директивы RedirectMatch и регулярных выражений
Еще одна полезная директива, рекомендуемая к использованию Хайпер — RedirectMatch. Цитата из комментариев: «Директива позволяет в качестве запрашиваемого адреса использовать регулярное выражение (пересылка не «с документа», а «со всех документов, типа …»). Редирект внешний — браузеру сообщается о необходимости загрузить другую страницу.
Синтаксис:
1 | RedirectMatch [status] regexp URL |
Значения статусов (код возврата веб-сервера) стандартные: permanent (301 — постоянный редирект), temp (302 — временный редирект, приходите ещё), seeother (303 — летим туда, там много вкусного), gone (410 — удалён навсегда).
Пример. То же перенаправление со старого домена на новый без подключения RewriteEngine:»
1 | RedirectMatch 301 ^(.*)$ www.domainname.com/$1 |
От себя добавлю, что вы можете использовать не только статусы, но и другие условия:
1 2 | RedirectMatch (.*)\.gif$ http://www.myserver.com$1.png RedirectMatch (.*\.jpg)$ http://www.myanother.com$1 |
23. Устанавливаем редирект для URL с GET параметрами
В том случае, если нужно сделать редирект с URL с параметрами, например: «http://www.proofsite.com.ua/wp-trackback.php?p=264», описанная в п. 4. «Настраиваем SEO-Friendly 301 Redirect» конструкция — работать не будет, поскольку GET параметр мешает правильной интерпретации команды.
Для корректного перенаправления URL с GET запросом, нужно прописать следующие директивы (на примере URL: http://www.proofsite.com.ua/wp-trackback.php?p=264):
1 2 3 | RewriteEngine On RewriteCond %{QUERY_STRING} ^p=264$ RewriteRule ^wp-trackback\.php$ http://www.proofsite.com.ua/article-2242.html? [L,R=301] |
Обратите внимание, «?» в конце URL не ошибка — а обязательно присутствующий знак!
24. Включение PHP в .html файлах
Еще одна директива, рекомендуемая Ruliks — позволяет убрать сопоставление по-умолчанию .html и .htm файлов с файлами с гипертекстовой разметкой, и добавить их обработку php-интепретатором.
1 2 | RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml |
Обязательно сделайте резервную копию файла .htaccess до внесения изменений и проверьте работоспособность всего сайта — после добавления новых строк.