Autor Zpráva
helpik.JPW
Profil
Dobrý den,

opět řeším situaci s htaccess. O co jde? Mám zavedený web, který má velmi slabou administraci a potřeboval bych přizpůsobilt strukturu webu. Stránky se tvořily zřejmě v PSPadu a nahodile. Co mě zajímá je správné pořadí pravidel v htaccess.

Pokud bych měl postupovat podle Yuhu odzhora [1], tak asi od obecnějěích pravidel k těm konkrétnějším?
1/ 404

2/ index

3/ redirect (z www na bez, nebo z bez na www)

4/ automatické redirecty skupin stránek se stejným zaměřením (se stejnou kategorií)
- RedirectMatch (.*)_(.*)\.htm$ $1-$2.html ) // - všude kde je "_" -> "-"
- RedirectMatch (.*)\.htm$ $1.html // - stránky končící htm -> html
- RedirectMatch (.*)galerie(.*)\.htm$ $1fotogalerie$2.html ) // - všude kde je "galerie" -> "fotogalerie"

5/ redirecty různých stránek
Redirect 301 /pozvanka.htm http://www.domena.cz/upload/pozvanka-na-udalost/pozvanka-na-silvestra-2011.html

- může být?

6/
# Cacheovani
...
# Komprese
...

Nebo na pořadí nezáleží? Co zdroj to trochu jiný pohled na věc. Někde se oběvují porty 80, malinko jiný sintaxe ...

Na zdroji [2] mě zaujala:
RewriteCond %{HTTP_USER_AGENT} Wget [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerSE [OR]
RewriteCond %{HTTP_USER_AGENT} CherryPickerElite [OR]
RewriteCond %{HTTP_USER_AGENT} EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ExtractorPro
RewriteRule ^.*$ http://www.spampoison.com/ [L]

 //- Tento kód odhalí většinu SPAM botů, které přesměruje pryč z Vašeho webu.
//- Tento kód přesměruje SPAM bota na adresu: http://www.spampoison.com/.

a ve zdroji [3]:
//Block bad bots
RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
Je to pravda? Dá se to opravdu použít nebo je to nesmysl?


zdroje:
[1] http://www.jakpsatweb.cz/server/htaccess.html
[2] http://htaccess.all4all.cz/
[3] http://www.htaccessredirect.net/index.php
Davex
Profil
helpik.JPW:
Pokud bych měl postupovat podle Yuhu odzhora [1], tak asi od obecnějěích pravidel k těm konkrétnějším?
Mělo by to být přesně naopak - konkrétnější před obecnějšími (i Yuhů to tak má).

Na umístění konfiguračních direktiv jako ErrorDocument, DirectoryIndex a Options nezáleží, ale pro lepší přehlednost mohou být u sebe.

Blokování přístupu podle User Agenta je celkem neefektivní, protože nejvíc škodící roboti se maskují jako normální prohlížeč. Co jsem si všiml, tak v tom výpisu jsou zablokované i užitečné programy jako Wget a různé stahovače stránek pro offline prohlížení. Osobně bych to použil jen pro selektivní blokování nějakého opravdu otravujícího robota, který nerespektuje vyloučení v souboru robots.txt.
helpik.JPW
Profil
// 404

   # nastaveni vychozi stranky adresare
DirectoryIndex index.php

   #Spuštění mod rewrite
RewriteEngine on

   #definice výchozího adresare
RewriteBase /

   RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://neco.domena.cz/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://neco.domena.cz/$1 [R=301,L]

   // konkrétní redirecty
Redirect 301 /pozvanka.htm http://neco.domena.cz/upload/pozvanka-na-udalost/pozvanka-na-silvestra-2011.html


   // obecné a skupinové redisrecty
RedirectMatch (.*)_(.*)\.htm$ $1-$2.html ) // - všude kde je "_" -> "-"
RedirectMatch (.*)\.htm$ $1.html // - stránky končící htm -> html
RedirectMatch (.*)galerie(.*)\.htm$ $1fotogalerie$2.html


   # Cacheovani
ExpiresActive On
# vychozi expirace 5 minut
ExpiresDefault A300
# expirace podle typu souboru - 1 týden:
# expiruje pocet sekund pote, kdy byl accessnut (A)
ExpiresByType application/x-javascript A604800
ExpiresByType text/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/jpg A604800
ExpiresByType image/p-jpeg A604800
ExpiresByType image/png A604800

Ten Options +FollowSymLinks - když jsem to zkoušel připisovat, vždy mi to hodilo chybu, tak jsem to vynechal

Mám to tedy zhruba dobře?

Děkuji
helpik.JPW
Profil
Mohl by jste mi prosím kouknout na tento htaccess? Zdá se v pořádku, ale nevím jak ošetřit duplicitu při zadání http://www.subdomena.domena.cz. Stále mi to vací 403 a You don’t have permission to access / on this server.


# nastaveni vychozi stranky adresare
DirectoryIndex index.php

   #Spuštění mod rewrite
RewriteEngine on

   #definice výchozího adresare
RewriteBase /

   #RewriteCond %{HTTP_HOST} ^www.subdomena.domena.cz [NC]
#RewriteRule (.*)www.subdomena.domena.cz$ http://subdomena.domena.cz/$1 [R=301,L]
# ekvivalent??? Ale také nefunkční … RewriteRule http://www.subdomena.domena.cz subdomena.domena.cz [R=301,L]

   RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://subdomena.domena.cz/$1 [R=301,L]
# nebo ??? RewriteRule index.php / [R=301,L]

   RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://subdomena.domena.cz/$1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^.*/index.htm
RewriteRule ^(.*)index.htm$ http://subdomena.domena.cz/$1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^.*/default.asp
RewriteRule ^(.*)default.asp$ http://subdomena.domena.cz/$1 [R=301,L]

   RewriteCond %{THE_REQUEST} ^.*/default.aspx
RewriteRule ^(.*)default.aspx$ http://subdomena.domena.cz/$1 [R=301,L]

   # Cacheovani
ExpiresActive On
# vychozi expirace 5 minut
ExpiresDefault A300
# expirace podle typu souboru – 1 týden:
# expiruje pocet sekund pote, kdy byl accessnut (A)
ExpiresByType application/x-javascript A604800
ExpiresByType text/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/jpg A604800
ExpiresByType image/p-jpeg A604800
ExpiresByType image/png A604800

Děkuji
Davex
Profil
helpik.JPW:
Podle chyby 403 to vypadá, že ke zpracování tohoto souboru .htaccess vůbec nedojde. Je tento soubor ve správném adresáři pro subdoménu?

Jinak to odstranění indexů a defaultů by šlo zjednodušit do jednoho pravidla:

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule  ^(.+/)?(?:index\.(?:html?|php)|default\.aspx?)$  http://subdomena.domena.cz/$1 [R=301,NE,L]

Univerzální přesměrování z varianty s www (doména 4. řádu) na variantu bez www (3. řádu):

www.subdomain.example.com -> subdomain.example.com

RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,NE,L]
helpik.JPW
Profil
Děkuji za poměrně značné zkácení kódu.
Jsem zvědavý a rewriterule jsem nenašel co znamená to NE. Souvisí to snad se subdoménou?
Davex
Profil
helpik.JPW:
Jsem zvědavý a rewriterule jsem nenašel co znamená to NE.
Já tam příznak NE vidím - podrobně a příklad Davida Grudla.
helpik.JPW
Profil
Davex:
To je jiná stránka :) , nicméně děkuji.
Jestli tomu rozumím, tak ten příznak NE by se měl dávat vždy, pokud přesměrovávám a píše mi to nestejnou hodnotu => když nechci escapovat původní?

Respektive pokud bych příznak NE nepřidal, tak poznám nějakou chybu jen náhodou a kdo ví kdy, takže NE dávat raději vždy?


Davex:
Univerzální přesměrování z varianty s www (doména 4. řádu) na variantu bez www (3. řádu):
>
www.subdomain.example.com -> subdomain.example.com
>
>
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$RewriteRule ^(.*)$ http://%1/$1 [R=301,NE,L]

Je zde nutné něco přepsat? Stále mi to házi chybu:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

Vaše zjednodušení na odstranění indexů funguje perfektně. Děkuji
helpik.JPW
Profil
Davex:
Je tento soubor ve správném adresáři pro subdoménu?
Pokud jste myslel to, zda je tento soubor hraccess v rootu subdomena.domena.cz , tak odpovídám ANO je.

a

RewriteBase /

Má cenu se vůbec zajímat tím, zda se má po zadání www.subdomena.domena.cz přesmerovat na subdomena.domena.cz? Třeba je to zcela zbytečné. Chtěl jsem odstranit duplicity.
Davex
Profil
helpik.JPW:
ten příznak NE by se měl dávat vždy, pokud přesměrovávám a píše mi to nestejnou hodnotu => když nechci escapovat původní?
Vždy, když se přesměrovávají adresy s parametry ve kterých se mohou vyskytovat znaky s diakritikou nebo se zvláštním určením. David Grudl ukazuje co se s tím pak bez příznaku NE stane.

Je zde nutné něco přepsat? Stále mi to házi chybu:
Nechybí tam RewriteEngine On? Nebo jak vypadá celý .htaccess pro subdoménu?

„Je tento soubor ve správném adresáři pro subdoménu?“
Pokud jste myslel to, zda je tento soubor hraccess v rootu subdomena.domena.cz , tak odpovídám ANO je.
Šlo mi o to, zda varianta s www směřuje do stejného adresáře na webserveru jako bez www a jestli tedy mají společný soubor .htaccess.
helpik.JPW
Profil
Davex:
mohou vyskytovat znaky s diakritikou nebo se zvláštním určením
Rozumím.


Nechybí tam RewriteEngine On? Nebo jak vypadá celý .htaccess pro subdoménu?
To by mohl být ten problém. Htacess je níže.

##########
## Nastaveni vychozi stranky adresare
##
DirectoryIndex index.php
##
##########
##########
## Spuštění mod rewrite
RewriteEngine on
##########
##########
## Definice výchozího adresare
##
RewriteBase /
##
##########
##########
## Univerzální přesměrování z varianty s www (doména 4. řádu) na variantu bez www (3. řádu):
##
## www.subdomain.example.com -> subdomain.example.com
## NEFUNGUJE !!!
#RewriteCond %{HTTP_HOST} ^www\.([^.]+\.[^.]+\.[^.]+)$
#RewriteRule ^(.*)$ http://%1/$1 [R=301,NE,L]
##
##########
##########
##
## Duplicita indexů
##
#RewriteCond %{THE_REQUEST} ^.*/index.php
#RewriteRule ^(.*)index.php$ http://subdomena.domena.cz/$1 [R=301,L]
## nebo ??? RewriteRule index.php / [R=301,L]
#RewriteCond %{THE_REQUEST} ^.*/index.html
#RewriteRule ^(.*)index.html$ http://subdomena.domena.cz/$1 [R=301,L]
#RewriteCond %{THE_REQUEST} ^.*/index.htm
#RewriteRule ^(.*)index.htm$ http://subdomena.domena.cz/$1 [R=301,L]
#RewriteCond %{THE_REQUEST} ^.*/default.asp
#RewriteRule ^(.*)default.asp$ http://subdomena.domena.cz/$1 [R=301,L]
#RewriteCond %{THE_REQUEST} ^.*/default.aspx
#RewriteRule ^(.*)default.aspx$ http://subdomena.domena.cz/$1 [R=301,L]
##
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule  ^(.+/)?(?:index\.(?:html?|php)|default\.aspx?)$  http://subdomena.domena.cz/$1 [R=301,NE,L]
##
##########


# Cacheovani
ExpiresActive On
# vychozi expirace 5 minut
ExpiresDefault A300
# expirace podle typu souboru - 1 týden:
# expiruje pocet sekund pote, kdy byl accessnut (A)
ExpiresByType application/x-javascript A604800
ExpiresByType text/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/jpg A604800
ExpiresByType image/p-jpeg A604800
ExpiresByType image/png A604800


Šlo mi o to, zda varianta s www směřuje do stejného adresáře na webserveru jako bez www a jestli tedy mají společný soubor .htaccess.
adresářová struktura domeny je:
/ = domena.cz - 3 html podstránky; htaccess zde není ale zcela jistě bych ho měl vytvořit co nejdříve. Předpokládám že bude obdobný se zde probíraným htaccess.
subdomena1/ = subdomena1.domena.cz. O této subdoméně se bavíme. Hodně HTML stránek a fotek. O tento htaccess se snažím
subdomena2/ = subdeomena2.domena.cz. S touto subdoménou nic neplánuji
Davex
Profil
Takže .htaccess je nejspíš správně.

• Nepřesměruje se ani po odkomentování těch řádků 22 a 23 nebo proč jsou zakomentované?
• Přesměruje se adresa www.subdomena1.domena.cz/index.htm nebo podobná s indexem?
• Když se přidá do adresáře subdomena1/ nějaký soubor, tak je přístupný na adrese www.subdomena1.domena.cz/nejaky.soubor?
helpik.JPW
Profil
Davex:
Nepřesměruje se ani po odkomentování těch řádků 22 a 23 nebo proč jsou zakomentované?
Zakomentoval jsem je, jelikož nepřesměrovávají. Stále chyba 403

Přesměruje se adresa www.subdomena1.domena.cz/index.htm nebo podobná s indexem?
Nikoliv. Tentokráte chyba 404.

Když se přidá do adresáře subdomena1/ nějaký soubor, tak je přístupný na adrese www.subdomena1.domena.cz/nejaky.soubor?
Nikolov. Tentokráte opět chyba 404.
Davex
Profil
helpik.JPW:
„Když se přidá do adresáře subdomena1/ nějaký soubor, tak je přístupný na adrese www.subdomena1.domena.cz/nejaky.soubor?“
Nikolov. Tentokráte opět chyba 404.
Subdoména bez www tedy nemá společný prostor s variantou s www a soubor .htaccess pro variantu s www musí být asi ještě jinde.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0