## trochę podrasowany .htaccess pod wordpresa
## 18.12.2017
## wersja zgodna z apache 2.2 (i hostingami akceptującymi te znaczniki)
## używasz na własną odpowiedzialność :) #SOA1
## niektóre wtyczki/motywy dopisują swoje regółki do .htaccess więc zacznij od skopiowania swojego obecnego pliku .htaccess żeby było co przywrócić w czarnej godzinie
## w tym pliku skasuj pojedyncze # na początkach linii
## jak wiesz co robisz możesz skasować również i podwójne # w niektórych liniach
## dopasuj konfigurację ścieżek do plików zamieszczonych na Twoim serwerze
## utwórz plik z hasłami .htpasswd (https://goo.gl/sZJBbz) najlepiej w katalogu niedostępnym z poziomu www
## wgraj ten plik (który właśnie czytasz) w katalog główny wordpressa pod nazwą .htaccess
## oczywiście jeżeli zawarte tu parametry/warunki są niewystarczające należy je zmienić
## nieużywane przez siebie sekcje skasuj, większość alternatywnych jest oznaczona poprzez (można skasować)
## znajdź 666.666.666.666 i podmień na adres IP z którego się łączysz
## utwórz pliki .htaccess opisane w sekcji "inne katalogi" (nie zapomnij skasować w nich #)
## rozważ zmianę uprawnień do pliku .htaccess opisane w sekcja "prawa dostępu"
## skasuj wszystko poniżej linii # END WordPress
## wpadnij na wordup warszawa napić się rumu z @bibliotekarz
## aktualizacje pliku znajdziesz pod adresem http://am.vj.pl/2017/01/22/htaccess-do-wordpressa/
## wyłaczamy podpis serwera
# ServerSignature Off
## dodanie/zmiana sposobu obsługi plików mime types możesz dodać własne typy plików (można skasować)
# AddType application/x-shockwave-flash .swf
# AddType video/x-flv .flv
# AddType image/x-icon .ico
## dodanie nagłówka na cześć Terrego Pracheta (jesli lubisz jego twórczość) (można skasować)
#
# header set X-Clacks-Overhead "GNU Terry Pratchett"
#
## dodanie nagłówków blokujących ataki XSS
#
# Header set X-Content-Type-Options nosniff
#
#
# Header set X-XSS-Protection "1; mode=block"
#
## ograniczanie wielkości pliku przesyłanego na serwer z poziomu apacza w bajtach, 0-2147483647(2GB)
## poniżej ograniczenie do 10BM
# LimitRequestBody 10240000
## dodatkowe parametry dla php zwiększające
## rozmiar uploadu dla pojedyńczego pliku
# php_value upload_max_filesize 25M
## rozmiar upload dla wielu plików jednocześnie wysyłanych (czyli powinno być większe równe upload_max_filesize)
# php_value post_max_size 50M
## wydłużenie czasu wykonywania skryptu
# php_value max_execution_time 300
## wydłużenie czasu uploadu
# php_value max_input_time 300
###########################
## pakowanie i keszowanie #
###########################
## tworzenie znaczników ETag (można skasować)
## można wdrozyć ale lepiej się skupić na Expires (poniżej)
#
# FileETag MTime Size
#
#
# ExpiresActive On
# ExpiresByType image/jpg "access plus 1 year"
# ExpiresByType image/jpeg "access plus 1 year"
# ExpiresByType image/gif "access plus 1 year"
# ExpiresByType image/png "access plus 1 year"
# ExpiresByType text/css "access plus 1 month"
# ExpiresByType application/pdf "access plus 1 month"
# ExpiresByType text/x-javascript "access plus 1 month"
# ExpiresByType application/x-shockwave-flash "access plus 1 month"
# ExpiresByType image/x-icon "access plus 1 year"
# ExpiresDefault "access plus 2 days"
#
## wersja dla serwisów na home.pl bo u nich nie działają dyrektywy przytoczone powyższe (można skasować)
# :Location /*.(gif|jpg|png|jpeg|ico)
# Expires A3110400
# :Location
# :Location /*.(txt|css|js|php|pl)
# Expires A2592000
# :Location
# :Location /*.(html|htm)
# Expires A86400
# :Location
## na home.pl nie działa FilesMach (można skasować tylko w przypadku home.pl)
## 2592000 = 30 dni, 864000 = 10 dni
#
#
# Header append Vary: Accept-Encoding
#
# Header unset ETag
#
# Header set Cache-Control "max-age=2592000, public"
#
#
# Header set Cache-Control "max-age=864000, private"
#
#
# Header set Cache-Control "max-age=864000, private"
#
#
# Header set Cache-Control "max-age=2592000, public, must-revalidate"
#
#
# Header set Cache-Control "max-age=864000, private, must-revalidate"
#
#
## włączanie kompresji
#
# AddOutputFilterByType DEFLATE text/text
# AddOutputFilterByType DEFLATE text/html
# AddOutputFilterByType DEFLATE text/css
# AddOutputFilterByType DEFLATE text/javascript
# AddOutputFilterByType DEFLATE text/xml
# AddOutputFilterByType DEFLATE text/plain
# AddOutputFilterByType DEFLATE image/x-icon
# AddOutputFilterByType DEFLATE image/svg+xml
# AddOutputFilterByType DEFLATE application/rss+xml
# AddOutputFilterByType DEFLATE application/javascript
# AddOutputFilterByType DEFLATE application/x-javascript
# AddOutputFilterByType DEFLATE application/xml
# AddOutputFilterByType DEFLATE application/xhtml+xml
## Zachowanie zgodności ze starymi przeglądarkami
# BrowserMatch ^Mozilla/4 gzip-only-text/html
# BrowserMatch ^Mozilla/4\.0[678] no-gzip
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# SetOutputFilter DEFLATE
# SetEnvIfNoCase RequestURI .(?:gif|jpe?g|png)$ no-gzip dont-vary
# SetEnvIfNoCase RequestURI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
# SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
#
## tylko jeśli nie serwer nie obsługuje mod_deflate inaczej (można skasować)
#
# mod_gzip_on Yes
# mod_gzip_dechunk Yes
# mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
# mod_gzip_item_include mime ^application/x-javascript.*
# mod_gzip_item_include mime ^text/.*
# mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
# mod_gzip_item_exclude mime ^image/.*
# mod_gzip_item_include handler ^cgi-script$
#
################
## autoryzacja #
################
### jeśli potrzebujesz blokowania wszystkiego dostęp po podaniu hasła (można skasować)
## AuthName "No pasaran test_jakis_opis"
## AuthType Basic
## AuthUserFile /sciezka/serwera/najlepiej/przed/katalogiem/widocznym/z/poziomu/www/.htpasswd
## Require valid-user
## konieczne żeby wyciąć boty
#
# AuthType Basic
# AuthName "Czego tu szukasz"
# AuthUserFile /sciezka/serwera/najlepiej/przed/katalogiem/widocznym/z/poziomu/www/.htpasswd
# require valid-user
#
### wygodniejsza blokada z dostępem bez hasła (na podstawie adresu IP) możesz podać wiele adresów lub klasę sieci (można skasować)
##
## AuthType Basic
## require valid-user
## Order allow,deny
## Allow from 666.666.666.666
## Allow from 666.666.666.
## Satisfy Any
##
### ograniczenie dostępu tylko do lokalnej sieci i domeny tere.vj.pl (można skasować)
##
## order deny,allow
## deny from all
## allow from 192.168.0.0/24
## allow from .tere\.vj\.pl.*
## możemy jednak zablokować niechcianych
## deny from 192.168.0.19
##
###################
## przekierowania #
###################
## 401 – Unauthorized przekierowanie na jakiś inny adres
## ErrorDocument 401 http://vj.pl/401.html
## 403 – Forbidden brak dostępu przekierowanie na lokalny plik
## ErrorDocument 403 /dostep_zablokowany.html
## 404 – Not Found czyli nie znaleziono wyświetli komunikat zawarty w cudzysłowach
## przekierowanie nie zadziała przy włączonych przyjaznych adresach w wordpressie
## ErrorDocument 404 "
404
oznacza że nie znaleziono tego pliku
"
## 410 – Gone czyli niema i nie będzie wyświetli komunikat zawarty w cudzysłowach
## ErrorDocument 410 "plik zakończył żywot i nie wróci z tamtego świata
410"
## 500 - error czyli błąd serwera przekierowanie na lokalny plik
## ErrorDocument 500 /padla.html
## 301 przekierowanie permanentne na zawsze pod SEO dopasuj jeśli potrzebijesz lub skasuj sekcję
## Redirect 301 /duda.html http://prezydent.pl
## Redirect 301 /stary-folder/duda.html /nowy-folder/duda-nowy-ta-sama-domena.html
## Redirect 301 / http://vj.pl
## 302 przekierowanie tymczasowe dopasuj jeśli potrzebijesz lub skasuj sekcję
## Redirect 302 /wp-content/duda.html /wp-content/uploads/wymiana-wkladu-w-dlugopisie.html
## Redirect 302 /mod_rewrite.html https://httpd.apache.org/docs/2.4/rewrite/intro.html
## włączamy moduł mod_rewrite
# RewriteEngine on
## ustawiamy główną ścieżkę do katalogu wordpressa
# RewriteBase /
############# Dyrektywy ##########################
## Directory do katalogów na dysku serwera #
## Files do konkretnego pliku na dysku serwera #
## Location odwołuje się do adresu internetowego #
##################################################
############
## blokady #
############
## blokujemy przeglądanie katalogów i wykonywanie skryptów CGI
# Options All -ExecCGI -Indexes
## alternatywnie do blokowanie wyświetlania używamy
## dla wszystkiego
# IndexIgnore *
## dla poszczególnych typów plików (resztę będzie widać) dodaj rozszeżenie które chesz ukryć
# IndexIgnore *.backup *.old
# IndexIgnore *.txt
## Pliki zabronione pod wordpressa
#
# Order allow,deny
# Deny from all
#
#
# Order deny,allow
# Deny from all
#
#
# Order deny,allow
# Deny from all
#
#
# Order allow,deny
# Deny from all
#
## wyłączanie uruchamiania skryptów w katalogu uploadu
#
# AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
# Options -ExecCGI
#
## blokada listowanie plików wedle potrzeby (można skasować sekcję)
#
# Order deny,allow
# Deny from all
#
## blokada listowania autorów
# RewriteCond %{QUERY_STRING} author=\d*
# RewriteRule .*$ /? [L,R=301]
## alternatywnie blokada (w roocie zamiast w katalogu) dostępu do zawartości katalogów wp-includes
#
# RewriteRule ^wp-admin/includes/ - [F,L]
# RewriteRule !^wp-includes/ - [S=3]
# RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
# RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
# RewriteRule ^wp-includes/theme-compat/ - [F,L]
#
## blokada dostępu do nieużywanych metod zapytań
# RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD) [NC]
# RewriteRule .* - [F]
#################
## odblokowanie #
#################
## dzięki "Satisfy any" umożliwiamy dostęp do plików w podkatalogu
#
# Order allow,deny
# Allow from all
# Satisfy any
#
####################################################
## wymuszanie pobierania na podstawie rozszerzenia #
####################################################
## narzuca pobieranie plików zamiast wyświetlania
#
# ForceType application/octet-stream
# Header add Content-Disposition "attachment"
#
## narzuca pobieranie plików z całego katalogu "uploads" zamiast wyświetlania
#
#
# Order allow,deny
# Allow from all
#
#
### przekierowanie z głównej na subdomenę www (można skasować)
## RewriteCond %{HTTP_HOST} !^$
## RewriteCond %{HTTP_HOST} !^www\.test\.vj\.pl$ [NC]
## RewriteRule ^/(.*)$ http://www.test.vj.pl/$1 [L,R=301]
### wymuszanie ssl (można skasować)
## RewriteCond %{SERVER_PORT} ^80$
## RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
####################
## zabawy z czasem #
####################
### w zależności od godziny podmienia serwowany plik (można skasować)
## RewriteCond "%{TIME_HOUR}%{TIME_MIN}" >0700
## RewriteCond "%{TIME_HOUR}%{TIME_MIN}" <1900
## RewriteRule "^style\.css$" "dzien.css" [L]
## RewriteRule "^style\.css$" "noc.css"
###############################################
## czasowa konserwacja, admin ma dostęp po IP #
###############################################
## musisz mieć plik przerwa-techniczna.html (można skasować)
# RewriteEngine on
# RewriteCond %{REQUEST_URI} !/przerwa-techniczna.html$
# RewriteCond %{REMOTE_ADDR} !^666\.666\.666\.666
# RewriteRule $ /przerwa-techniczna.html [R=302,L]
########################
## dodatkowe wycinanki #
########################
## blokada skryptów i SQLi poprzez URL-a
## skrypty wywołujące base64_encode w adresie
# RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
## wywołania