Autor Zpráva
Daze
Profil
Potřeboval bych po změně domény udělat následující věc: všechny požadavky přesměrovat na novou doménu, ale s výjimkou požadavků na index.htm. Nejlepší řešení je jednoznačně negativní RewriteCond. Tak jsem myslel, že prostě dám do .htaccessu následující:

RewriteCond %{HTTP_HOST} !^www\.davidzbiral\.webzdarma\.cz/

RewriteCond %{HTTP_HOST} !^www\.davidzbiral\.webzdarma\.cz/index\.htm
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=301,QSA,L]


a že to přesměruje všechny požadavky kromě požadavku na index. Jenže mi to nefunguje - přesměrovává to všechno, včetně indexu. Neporadíte někdo, jak na to nebo kde mám chybu?
Kajman_
Profil *
V http_host je název serveru, žádná cesta.

RewriteEngine On
RewriteRule ^index.htm$ - [S]
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=301,L]

Výjimky je lepší řešit tak, že pokud to něčemu vyhovuje, tak se to nechá být (ta pomlčka) a flagem S se řekne, kolik dalších RewriteRule se má přeskočit, pokud to souhlasilo.
Daze
Profil
Přesně jsem to zkopíroval, ale pořád to přesměrovává i index. Veškerý obsah .htaccess byl následující:


ErrorDocument 404 /404.htm
RewriteEngine On
RewriteRule ^index.htm$ - [S]
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=301,L]


Přesměrovávalo to všechno, i index.htm (samozřejmě že jsem kontroloval i případnou chybu v napsání do adresního řádku prohlížeče).

Pak jsem to zkusil i po svém, přes negativní podmínku, ale s tou opravou, co jsi o ní psal (jen název souboru, ne cesta):


ErrorDocument 404 /404.htm
RewriteEngine On
RewriteCond %{HTTP_HOST} !^index.htm$
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=301,L]


Pořád to samé - přesměrovává to všechno.
Ale díky za radu, co se vlastně do té RewriteCond píše.

Máte někdo nějaký nápad, jak na to, nebo doplnění toho, co tu psal Kajman_?
Kajman_
Profil *
A máte tam index.htm nebo index.html nebo index.php?
Kajman_
Profil *
A ještě jedna věc... některé prohlížeče si 301 pamatují a pak rovnou jdou na novou stránku. Takže se občas stává, že se to přesměruje i když to neudělá server. Na ladění je lepší použít 302 a až po vyladění dát 301.

RewriteEngine On
RewriteBase /
RewriteRule ^((default|index)\.(html?|php))?$ - [S]
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=302,L]
Daze
Profil
Mám tam opravdu index.htm. Uvažoval jsem i, že jestli server nejdřív hledá index.php, tak třeba dojde k přesměrování ještě dřív, než se server podívá po index.htm, tak jsem radši zadal do adresního řádku celou adresu včetně "/index.htm".

Právě jsem taky vyzkoušel Mozillu, abych vyzkoušel možnost, že je to tím, že si to IE pamatuje. Přesměrovává to taky.
Pro úplnost: o tuhle věc se snažím na webzdarma.

Děkuji vám za rady; díky nim jsem líp pochopil, jak se to zapisuje, a myslím, že se budou hodit i dalším.
Kajman_
Profil *
To je divné. Zkuste ještě nahradit S za L. Nebo tam přidat flag NC...

RewriteRule ^((default|index)\.(html?|php))?$ - [L,NC]
Daze
Profil
To je ono! Tohle funguje bez problémů přesně tak, jak jsem chtěl:

RewriteEngine On
RewriteBase /
RewriteRule ^((default|index)\.(html?|php))?$ - [L,NC]
RewriteRule (.*) http://www.david-zbiral.cz/$1 [R=301,L]


Díky!
Kajman_
Profil *
Možná tam byly problémy s velikostí písmen souboru. Možná to ve skutečnosti nebylo malýma písmenkama a vyřešil to ten flag NC, který jejich velikost ignoruje.
Daze
Profil
Bylo to malými. Aspoň teda na disku to mám všechno malé, tak doufám, že to server nemění.
Toto téma je uzamčeno. Odpověď nelze zaslat.