Apache - .htaccess правила и трикове
#1
Здравейте,

В тази тема ще споделяме разни малки хитринки за добавяне на правила в .htaccess файла валидни за вашия WEB сървър - Apche. Това би било полезно за онези, които имат web хостинг и искат да си създадат персонални правила, чрез файла .htaccess

На първо място ето как се създава такъв файл: Отваряте си някакъв текстов редактор било notepad (Windows) или пък gedit (Linux) или какъвто ползвате. Правите нов файл и давате Save as... като запазвате с име .htaccess без да му задавате разширение. За еднкодинг изберете UTF-8. Разбира се файла се редактира със същия текстови редактор. По принцип файла е скрит и за да го виждате трябва да разрешите във вашата операционна система да се показват скритите файлове и папки.

Като за начало, ето и няколко основни правила:

Как да забраним на всички потребители да има достъп до нашия сайт:
Код:
оrder deny,allow
deny from all


Или пък искаме да забраним на всички достъпа с изключение на нашия IP адрес, тогава:
Код:
deny from all
allow from 123.456.789.123


Как да забраним конкретен IP адрес:
Код:
оrder deny,allow
deny from 123.456.789.123


За списък от адреси, просто ги изреждате:
Код:
оrder deny,allow
deny from 123.456.789.123
deny from 456.789.345.123


Ако искате да забраните конкретна мрежа: Така целия рейнж от адреси няма да има достъп до сайта.
Код:
оrder deny,allow
deny from 123.456.789



Ако искате да забраните дадена директория да се разлиства (достъпна) директно през браузъра:
Код:
Options -Indexes


Ако дадена директорията (папка) е забранена за разлистване, но искате да разрешите достъпа до конкретни файлове:
Код:
Options +Indexes
IndexOptions FancyIndexing FoldersFirst NameWidth=* DescriptionWidth=*

<Files ~ "\.(gpj|gif|png|txt|css)$">
   order deny,allow
   allow from all
</Files>


Ако искате да забраните линкове към сайта си или достъп от даден домейн:
Код:
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} example\.com [NC,OR]
RewriteCond %{HTTP_REFERER} example-2\.net [OR]
RewriteCond %{HTTP_REFERER} example-3\.biz
RewriteRule .* - [F]


Ако искате да форсирате кеширането в браузъра и при следващо посещение на същия клиент, определени ресурси да се зареждат от локалната му машина, а не от сървъра:
Код:
<FilesMatch "\.(gif|png|jpg|jpeg|ico)$">
  ExpiresActive On
  ExpiresDefault "access plus 1 week"
</FilesMatch>

Забележка: В случая, кеширането е валидно за една седмица. Може да задавате други стойности, примерно  1 day или 1 month


Ако искате да форсирате определена директория от сайта ви да се отваря в/у SSL:
Код:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://example.com/$1 [R,L]

Забележка: При това положение директорията folder (което е името на папката), ще се пренасочва към SSL връзка. Това обаче ще е така и за останалите директории над нея . Т.е. ако имате домейн http://example.com и сте задали папка admin да се пренасочва към SSL, то и root директорията ще се отваря със SSL, ако например изпишете https://example.com. Това обаче понякога създава известни неудобства или води до грешки. За пример - нямате закупен сертификат от лицензиран издател, а сте си генерирали self-signed с цел да си защитите admin панела, в който да се логвате по криптиран връзка от съображение за сигурност. Ще е добре останалата част от сайта да няма възможност да се отваря по SSL, защото подобни self-signed сертификати се определят от браузърите като издадени от ненадежден издател и това може да стресне потребителите на сайта, за това е добре да се добави още едно правило като допълнение към горното и видът на записа ще изглежда така:


Код:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(|/)$ http://example.com/ [R,L]


За сега за тези се сетих. По-нататък ще добавяме още правила. Ако имате въпроси сме на среща.
Отговори
#2
Няколко цента и от мен Smile

Ако искате да пренасочите дадена страница от ваш сайт.

Код:
Redirect 301 /oldpage.html http://www.example.com/newpage.html
Redirect 301 /oldpage2.html http://www.example.com/folder/

За да пренасочите целият ваш сайт.

Код:
Redirect 301 / http://newsite.com/

По този начин старият ви сайт www.oldsite.com/some/crazy/link.html ще стане www.newsite.com/some/crazy/link.html .

source
Yo Quiero Taco Bell!
Отговори
#3
Здравейте Smile 

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/wordpress/wp-content/th...f2?v=4.5.0. (Reason: CORS header 'Access-Control-Allow-Origin' missing). <неизвестно>

downloadable font: download failed (font-family: "FontAwesome" style:normal weight:normal stretch:normal src index:1): bad URI or cross-site access not allowed source: http://localhost/wordpress/wp-content/th...f2?v=4.5.0 font-awesome.min.css:4:14

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/wordpress/wp-content/th...ff?v=4.5.0. (Reason: CORS header 'Access-Control-Allow-Origin' missing). <неизвестно>

downloadable font: download failed (font-family: "FontAwesome" style:normal weight:normal stretch:normal src index:2): bad URI or cross-site access not allowed source: http://localhost/wordpress/wp-content/th...ff?v=4.5.0 font-awesome.min.css:4:


За да го фиксна  направих това
Код:
<FilesMatch "\.(ttf|otf|eot|woff)$">
 <IfModule mod_headers.c>
   Header set Access-Control-Allow-Origin "*"
 </IfModule>
</FilesMatch>
но не в .htaccess на Apache,ами в httpd.conf на Apache.Правилно ли е това? И какво ми казват тези грешки.Преди време търсех да премахна Index OF ,но не намерих файла .htaccess .Работя локално,ползвам Мозила.Много полезна тема за начинаещи като мен,които тепърва навлизат в материята.Разработвах една Wordpress  тема и исках да включа FontAwesome в проекта.Тези грешки  ги получавах и когато свалях някакви фонтове  и ги включвах в проектите си ,но така и не разбирах какво се случва Smile
Отговори
#4
(16.03.2016, 00:29)maria11 написа: Здравейте Smile 
За да го фиксна  направих това
Код:
<FilesMatch "\.(ttf|otf|eot|woff)$">
 <IfModule mod_headers.c>
   Header set Access-Control-Allow-Origin "*"
 </IfModule>
</FilesMatch>
но не в .htaccess на Apache,ами в httpd.conf на Apache.Правилно ли е това? И какво ми казват тези грешки.Преди време търсех да премахна Index OF ,но не намерих файла .htaccess .Работя локално,ползвам Мозила.Много полезна тема за начинаещи като мен,които тепърва навлизат в материята.Разработвах една Wordpress  тема и исках да включа FontAwesome в проекта.Тези грешки  ги получавах и когато свалях някакви фонтове  и ги включвах в проектите си ,но така и не разбирах какво се случва Smile

Здравейте и добре дошла при нас. Радвам се, че темата ви е полезна. По принцип .htaccess не е необходим при локално разработване и за това не сте го открила. Този файл се създава допълнително и той по-скоро е когато сайта вече е онлайн. Освен това е полезен най-вече когато се използва споделен хостинг, за да се създадат персонални правил само в/у управляваната от вас директория. Когато става дума, че вие управлявате целя сървър то тогава .htaccess не е не необходим. Там може да си задавате правила, чрез защитната стена и .conf файловете на сървъра. Само внимавайте с правила, защото понякога може да са опасни. Що се отнася до грешките, който получавате, до колкото успях да разбера са свързани с интегрирането на шрифтове. Ако използвате интегрирането на webfonts е нормално да бъдат блокирани когато горим за заявка от вън, а вие имате правило. Ако интегрирате шрифтовете локално, ням да получавате тези грешки.
Отговори
#5
Здравейте и добре заварили Smile .Благодаря за включването .
Да видим дали съм Ви разбрала правилно,ако шрифтовете ги имам в самата ми операционна система всичко ще е ОК ,но ако са под формата на изтеглени файлове ще дава грешка.
Какво се прави в случай че не ползвам Apache  сървъра ,изключен ми е и тествам обикновена статична страница ,имаща HTML & CSS.
Информацията ,която давате е полезна и интересна,малко са подобни статии като Вашата,хубаво е хората знаещи  и можещи да се събират във форумните общности и да помагат на тези ,които стартират сега-като мен Smile .
Отговори
#6
(16.03.2016, 17:25)maria11 написа: Здравейте и добре заварили Smile .Благодаря за включването .
Да видим дали съм Ви разбрала правилно,ако шрифтовете ги имам в самата ми операционна система всичко ще е ОК ,но ако са под формата на изтеглени файлове ще дава грешка.
Какво се прави в случай че не ползвам Apache  сървъра ,изключен ми е и тествам обикновена статична страница ,имаща HTML & CSS.
Информацията ,която давате е полезна и интересна,малко са подобни статии като Вашата,хубаво е хората знаещи  и можещи да се събират във форумните общности и да помагат на тези ,които стартират сега-като мен Smile .

Аз може би грешно съм се изразил по-горе и не сте ме разбрала. Интеграцията на шрифтове в web страница, няма много общо с това какви шрифтове използвате във вашата операционна система. Има значение до толкова, че когато правите самата разработка, вие ще виждате шрифта, който залагате ако го имате инсталиран във вашата ОС. Аз имах друго предвид. По принцип съществуват два начина за интегриране на шрифтове в web страници. Единият е стандартен т.е. да свалите желания шрифт в .ttf примерно, да го поставите в отделна папка в директорията на сайта и посредством css да внедрите шрифта. Другия начин е да използвате web fonts. Google примерно предлагат такива варианти, а и не само те. Какво ще рече това. Това означава, че не е необходимо да сваляте шрифтовете и да ги внедрявате, а образно казано те ще се зареждат през интернет.

Статични сайтове може да тествате и без Apache  сървър, но ако говорим за динамичен, код т.е. има и PHP, то той не би могъл да се изпълни, без web сървър. Грешките, който получавате може да са свързани с интегриран web шрифт, за който правилата в .htaccess или .conf са му отрязали достъпа.
Отговори


Отваряне на:


Потребители разглеждащи темата: 1 гост(и)