Autor Zpráva
pavel456
Profil *
Pěkný den.

Něco jsem si o .htaccess přečetl, ale vůbec tomu nerozumím. Prosím o polopatické vysvětlení, co mám vlastně do tohodle souboru vložit, když chci tři věci:

1) aby se stránky zobrazovaly bez přípony (na všech stránkách mám příponu php)
2) aby stránka example.com/abc nebyla dosažitelná i na example.com/abc.php
3) aby se stránky zobrazovaly s úvodním www a aby byly všechny stránky bez www přesměrovány na verzi s www

Omluvte mou neznalost, ale bude soubor .htaccess pracovat správně už na apachi nebo ho musím vložit až na server, kde mi hostujou stránky?
Kajman
Profil
1,2 Řešení některých častějších problémů (FAQ) » Stránky s adresou bez koncovky
3 např. Jak v mod_rewrite vynutit prefix "www." pro multidomény?
pavel456
Profil *
Kajman:

Díky. Je nějaká možnost, jak to vyzkoušet na apachi? Když to hodim k ostatním souborům a aktualizuju prohlížeč, apachi mi nenačte stránky. A to ani potom, co .htaccess odstranim.
Davex
Profil
pavel456:
apachi mi nenačte stránky
Je v souboru error.log zaznamenána nějaká chyba?
pavel456
Profil *
Davex:

Hromada, ta poslední je "[Thu Oct 11 20:40:03.416992 2012] [core:error] [pid 2844:tid 1680] (20023)The given path was above the root path: [client 127.0.0.1:54955] AH00127: Cannot map GET /C:/Program%20Files/xampp/htdocs/web/index HTTP/1.1 to file"

Dokud jsem do složky "web" uloženou na C:/Program Files/xampp/htdocs nedal .htaccess, spouštěl jsem php stránky přes prohlížeč napsáním localhost/web/index.php

Po vložení .htaccess (a odebrání) mi prohlížeč hlásí: "Přístup odmítnut!

Nemáte právo pro přístup k požadovanému objektu. Buď je chráněn proti čtení, nebo není serverem čitelný.

Pokud si myslíte, že toto je chyba serveru, kontaktujte, prosím, webmastera.
Error 403
localhost
Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 "
Kajman
Profil
Používáte u svých widnows UAC?
pavel456
Profil *
Kajman:

Patrně ne. Matně si vzpomínám, jak před instalací xamppu na mě vyskočilo okno říkající právě něco o UAC. Po dokončení instalace apache chodil, takže jsem tomu nevěnoval pozornost.
Davex
Profil
pavel456:
Dokud jsem do složky "web" uloženou na C:/Program Files/xampp/htdocs nedal .htaccess, spouštěl jsem php stránky přes prohlížeč napsáním localhost/web/index.php
V tom případě musíš upravit cíl přesměrování.

RewriteRule ^(.+)\.php$ /web/$1 [L,R=301,NE]
pavel456
Profil *
Tak. Nefunguje to na apachi, ale co hůř - nefunguje to ani na webu. V .htaccess mám

RewriteEngine On
 
# podstrčení PHP, přepsat pouze na existující skript
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$    $1.php    [L]
 
# podstrčení HTML, přepsat pouze na existující soubor
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^([^.]+)$    $1.html    [L]

# přesměrování na verzi bez přípony, pokud ještě není přepsáno a není to POST požadavek
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ([^.]+\.[^.]+)$
RewriteRule ^(.*) http://www.%1/$1 [R=301,QSA,L,NE]

ale výstupem, například pro index.php je http://www.maweb.eu/home/users/hlavolammaweb/hlavolam.maweb.eu/web/index - čili mi to hodí 404 not found.

Když už jsem u toho indexu... dříve jsem chtěl (mimo jiné) z www.example.com/index.php tvar www.example.com/index. Ale bylo by možné právě pro ten index dát jen www.example.com? Samosřejmě se zachováním všech vlastností zmíněných v předešlých příspěvcích.
Davex
Profil
Jak už jsem psal [#8], zkus přidat lomítko před cíl přesměrování.

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ /$1 [L,R=301,NE]

Ale bylo by možné právě pro ten index dát jen www.example.com?
To by mělo fungovat automaticky, když zadáš do prohlížeče adresu bez indexu, tak se index.php nenačte?
pavel456
Profil *
Davex:

Díky!!Ovšem prosím ještě poradit - furt to nefunguje podle představ - bez www verze nefunguje (to bude asi doménou třetího řádu) a právě ten index se zobrazí v řádku s URL. A já ho tam nechci - místo www.example.com/index bych radši měl www.example.com - pokud to jde.
Davex
Profil
pavel456:
Pokud chceš přesměrovat pouze na jednu verzi, tak musíš opět upravit cíl přesměrování:

RewriteRule ^(.+)\.php$ http://www.subdomain.example.com/$1 [L,R=301,NE]

Druhé přesměrovávací pravidlo nebude fungovat správně, protože není stavěno na přesměrování domény třetího řádu na doménu čtvrtého řádu. Tam se musi přidat další podvýraz, aby se našla další subdoména.

RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ([^.]+\.[^.]+\.[^.]+)$
RewriteRule ^(.*) http://www.%1/$1 [R=301,QSA,L,NE]

Za jakých okolností se tam ten index objevuje? Když na něj nepovede žádný odkaz, tak se tam sám od sebe přece neobjeví.
pavel456
Profil *
Davex:

Opět děkuji!

No jo, jenže mě na index vede odkaz už jen z headeru, kterej je na každý stránce... Jestli to nejde udělat nějak jednoduše, tak to nechme plavat. Vždycky můžu dát za relativní odkaz absolutní (v domnění, že by to řešilo daný problém). Ale to asi dělat nebudu - za tu námahu to nestojí. Krom toho je to jen nepatrná vada na kráse.

Ještě jednou díky.
Davex
Profil
Nejlepší bude nahradit odkazy na index.php za <a href="/">. Přesměrováním na serveru by to také šlo, ale vhodnější je opravit příčinu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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