## 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