ugrás a tartalomhoz

.htaccess RewriteRule

this.isti · 2015. Jún. 26. (P), 15.58
Sziasztok!

Azt szeretném elérni, hogy az oldal elérhető legyen kiterjesztés nélkül, illetve html kiterjesztés esetén irányítsa át a kiterjesztés nélküli oldalra.

Következő kóddal próbálkoztam:
RewriteEngine On
RedirectMatch 301 (.*)\.html$ http://honlap.hu$1
RedirectMatch 301 (.*)\.htm$ http://honlap.hu$1

RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]


Ez működik is addig, míg nincs ugyanolyan nevű mappa és php fájl, ugyanabban a könyvtárban.
Ha ugyanaz a php-nak és a mappának a neve, 404-es hibaüzenet jön elő, ha nem adom meg az url-ben a .php kiterjesztést.

Mit javítsak a kódon?

Köszönöm előre is a segítséget!
 
1

-d

Hidvégi Gábor · 2015. Jún. 26. (P), 17.47
Érdemes megnézni a -d RewriteCond-ot.
2

Már próbálgattam, de nem megy...

this.isti · 2015. Jún. 26. (P), 19.03
Hogyha van mappa is ugyan ezen a néven, szerény véleményem szerint arra is jónak kéne lennie, mert a RewriteRule sor egyértelműen a .php végződésű fájlt kéne hogy keresse.

Szóval próbálgattam, hogy beszúrok olyan sorokat, mint hogy:
RewriteCond %{REQUEST_FILENAME} -d
RedirectMatch 301 (.*)\$ http://honlap.hu$1.php

de csak elrontja az egészet.
Meg amúgy se akarom átirányítani a .php-s url-re.

Légy szíves, kicsit konkrétabb választ adj.
3

A RewriteCond-ot a

Hidvégi Gábor · 2015. Jún. 26. (P), 19.54
A RewriteCond-ot a RewriteRule elé kell írni.
4

A RewriteCond-ot a RedirectMatch feltétele

this.isti · 2015. Jún. 26. (P), 21.59
A RewriteCond-ot a RedirectMatch feltételeként próbáltam beszúrni, de ezek szerint helytelenül.

RewriteEngine On
RedirectMatch 301 (.*)\.html$ http://probalgatasok.net16.net$1
RedirectMatch 301 (.*)\.htm$ http://probalgatasok.net16.net$1

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]


Így is ugyan az a gond, mint eddig: ha van ilyen nevű mappa is és fájl is, akkor 404-es error.
pl: "index.php" fájl és "index" mappa

Szóval mit tegyek a RewriteCond %{REQUEST_FILENAME} -d ágba?
5

Meg van, mi a gubanc, de nem tudom, hogy kell megoldani

this.isti · 2015. Jún. 26. (P), 22.16
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]


Ha mappát is talál, valamiért az url után teszi a / jelet, így a "mappa/.php" fájlt keresi. Ha a mappába beleteszek egy ilyen, ".php" nevű fájlt, azt tölti be.

Hogy vegyem ki a / jelet, hogy ne menjen bele a mappába, hanem a mappa nevével egyező php fájlt nyissa meg?
6

Hogyan

Hidvégi Gábor · 2015. Jún. 27. (Szo), 19.38
1, Kapcsold be a RewriteLog-ot, minimum 3-as legyen a szintje, és nézd meg, hogy mi a tartalma, miután a böngészőben matatsz

Ha elkészültél, ne felejtsd el 0-ra állítani.

2, A RewriteRule-ban van egy külső és egy belső zárójel, a $1-be a külső tartalmát fogja beilleszteni, mert azt találja meg elsőnek. Vagy vedd ki a külső zárójelet, vagy pedig $2 legyen a végén.
7

Egy könyvtárral feljebb küld

this.isti · 2015. Jún. 28. (V), 01.12
Kipróbáltam mindkettőt, amit írtál: kivettem a külső zárójelet, és úgy is, hogy $2-re átírtam. Mindkettő esetnél egy könyvtárral feljebb keresi a .php fájlt.
Pl:
domain.com/mappa/nev url esetén, ha van ilyen mappa, akkor
domain.com/mappa/.php fájlt keresi.

eddig ez volt:
domain.com/mappa/nev url esetén, ha van ilyen mappa, akkor
domain.com/mappa/nev/.php fájlt keresi
Még akkor is, ha "domain.com/mappa/nev.php" is létezik.
Akkor viszont, ha nem létezik a "domain.com/mappa/nev" mappa, akkor a domain.com/mappa/nev.php fájlt betölti.

Hogy kéne eltüntetni azt a fránya / jelet a .php elől, mappa esetén?
8

Kerülő megoldás

this.isti · 2015. Jún. 28. (V), 17.19
Egyelőre egy kis kerülő megoldást találtam ki:
RewriteEngine On
RedirectMatch 301 (.*)\.html$ http://dom.com$1
RedirectMatch 301 (.*)\.htm$ http://dom.com$1

RedirectMatch 301 ^/(.*)aaa(.*)\/$ /$1aaa$2_segednev

RewriteCond %{REQUEST_URI}\.php !-f
RewriteRule ^([^.]+)_segednev$ $1.php [NC,L]

RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]


Ezzel az oldal kap egy "segédnevet" az url végére. (kivéve, ha a fő könyvtárra hivatkozunk)
Ez jól jöhet, ha kereső optimalizálni akarjuk az oldalt egy szóra.
Hátrányos lehet, ha könnyen megjegyezhető url címekhez akarjuk rendelni a könyvtárakat.

Hátránya, hogy minden mappát fel kell sorolni a negyedik sorral, ami a fő könyvtárban van.


Van ötlet, hogy hogyan lehetne elhagyni a "_segednev" részt?
Vagy hogy lehet megoldani, hogy ne kelljen felsorolni az összes főkönyvtár beli mappát?
9

Csak szükség esetén rakja bele a segédnevet...

this.isti · 2015. Jún. 28. (V), 17.28
Csak akkor rakja a segédnevet az url végére, ha abban a könyvtárban van, a fájl nevével megegyező mappa.