Autor Zpráva
marek187
Profil
Zdravím... potrebujem nejaký kód do .htaccess, ktorý by zrušil koncovku .php a tiež zrušil index.php (aby nevznikala duplicita).

Vačšina kódov čo som skúšal, tak buď vytvorilo cyklické presmerovanie alebo odobralo koncovku .php, ale subor už nenačítalo (chyba 404).
juriad
Profil
Viz Řešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony

Ohledně přesměrování toho index.php, to je jednoduché:
RewriteRule ^index\.php$ / [R=301]
marek187
Profil
OK, jeden problem by bol vyrieseny... avsak aj po tomto navode robi to iste (cache pravidelne cistim ak vykonavam zmeny v .htaccess)... odstrani sice koncovku .php, ale to je vsetko... je nevyhnutne este v .htaccess po jednom presmerovat subory s .php koncovkou na tvar bez nich?
juriad_
Profil *
marek187:
Precti si nasledujici odstavec v odkazane strance. Pojednava o presmerovani existujicich stranek na variantu bez koncovky.
marek187
Profil
juriad:
OK, uz aj to by nejako bolo... ale naskytol sa taky mensi problem, ze na jednej podstranke sa mi nacitava iny subor (tiez .php) a prehliadac vyhadzuje cyklicke presmerovanie... a toto uz neviem ako vyriesit...
juriad_
Profil *
Ukaz cely .htaccess a cestu ke strance, ktera zlobi.
marek187
Profil
Options -Indexes +FollowSymLinks

RewriteEngine On  
RewriteBase /


####### Force SSL #############################################
RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

####### Force WWW #############################################
RewriteCond %{HTTP_HOST} !^www\.domena\.sk$ [NC]
RewriteRule ^(.*)$ http://www\.%{HTTP_HOST}/$1 [R=301,L]

####### Remove trailing slashes ###############################
RewriteCond %{HTTP_HOST} ^(www.)?domena\.sk$ [NC]
RewriteRule ^(.*)/$ http://%{HTTP_HOST}/$1 [R=301,L]

####### Remove extension .php #################################
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+)$ /$1.php [L]

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

####### Remove index.php ######################################
RewriteRule ^index\.php$ / [R=301]

####### Error Documents #######################################
ErrorDocument 404 http://%{HTTP_HOST}       

Odkaz tu este uvadzat nechcem, lebo stranka nieje oficialne spustena a este ju len pripravujem. Ale v jednoduchosti to popisem tak, ze stranka x.php nacitava pomocou jquery dalsi subor y.php... Avsak ked otvorim hlavnu stranku, resp. x.php tak to vyhadzuje cyklicke presmerovanie... ak otvorim len vsunuty subor, resp. y.php, tak nema s nim problem...


Teraz som si vsimol, ze kym ta podstranka vyhadzuje cyklicke presmerovanie a snazim sa to reloadovat, tak stale prida a odobere https, dokolecka... potom ako sa https vystrieda s http tak tam prida na konci lomitko (domena.sk/nazov/) a stale tiez dokolecka...
juriad
Profil
marek187:
Jelikož přesměrováváš vše na https, všude dále změň http an https, aby ses vyhnul zbytečnému přesměrování.
Také můžeš sjednotit více pravidel do jednoho:

####### Force WWW and Remove trailing slashes #################
# gets rid of a slash if there is one
RewriteCond %{HTTP_HOST} !^www\.domena\.sk$ [NC]
RewriteRule ^(.*)/?$ https://www\.%{HTTP_HOST}/$1 [R=301,L]

####### Remove trailing slashes ###############################
# needed for case if there is already WWW but also a slash
RewriteCond %{HTTP_HOST} ^(www.)?domena\.sk$ [NC]
RewriteRule ^(.*)/$ https://%{HTTP_HOST}/$1 [R=301,L]
marek187
Profil
juriad:
OK, takze upravil som to nasledovne:

####### Force SSL #############################################
RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

####### Force WWW #############################################
RewriteCond %{HTTP_HOST} !^www\.domena\.sk$ [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}/$1 [R=301,L]

####### Remove trailing slashes ###############################
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

####### Remove extension .php #################################
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^.]+)$ /$1.php [L]

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

Zbavil som sa problemu s https, dvojiteho www (www.www.), cyklickeho presmerovania... ale pri tom jednom .php subore stale vyhadzuje chybu 403... ide o to, ze adresar v zlozke ma podobny nazov ako php subor... da sa tomuto nejako zabranit?
Kajman
Profil
Pokud se nechcete odkazovat na adresáře, tak zakažte doplňování lomítka díky mod_dir.
DirectorySlash Off

A odstraňte podmínku na 10. řádku.

Navíc raději přijtete u všech přesměrování příznak NE, stejně jako u toho posledního.
marek187
Profil
Tu zlozku som prehodil inam a uz je tento problem nepodstatny.

Radsej by som sa opytal, ci tento kod je sam o sebe spravny (postupnost, zapis a pod.):

Options -Indexes +FollowSymLinks
                
RewriteEngine On  
RewriteBase /

####### Force SSL ###############################################
RewriteCond %{HTTP:HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301,NE]

####### Force WWW ###############################################
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}/$1 [L,R=301,NE]

####### Remove .php extension ###################################
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^.]+)$ /$1.php [L]

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

####### Remove index.php ########################################
RewriteRule ^(.*)index\.php$ https://%{HTTP_HOST}/$1 [L,R=301,NE]

####### Error Documents #########################################
ErrorDocument 404 https://%{HTTP_HOST}             
Kajman
Profil
Řádky 14-16 bych asi dal až za všechny přesměrování, ale problém by to být neměl, pokud nebudete uvádět adresu /index Také bych přehodil pořadí přesměrování index.php a obecné .php.

Proč máte jako ErrorDocument nastavenou úvodní stranu? Přijde mi lepší informovat uživatele o chybě.
marek187
Profil
Kajman:
Řádky 14-16 bych asi dal až za všechny přesměrování
####### Remove .php extension ###################################
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^.]+)$ /$1.php [L]
 
####### Redirect .php extension #################################
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ https://%{HTTP_HOST}/$1 [L,R=301,NE]
Mam to robene podla tohto navodu: Rešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony
Chapem vas spravne, ze je potrebne prehodit 1.-3. a 5.-9. riadok medzi sebou?

Také bych přehodil pořadí přesměrování index.php a obecné .php.
Co myslite pod tym obecnym?
Nestaci zmenit prikaz na RewriteRule ^(.*)index$ ... (bez koncovky .php)?

Proč máte jako ErrorDocument nastavenou úvodní stranu? Přijde mi lepší informovat uživatele o chybě.
To je len docasne riesenie, potom to upravim na ErrorDocument 404 https://%{HTTP_HOST}/404

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0