ugrás a tartalomhoz

URL rewrite gondok és kérdések

ada · 2006. Aug. 2. (Sze), 14.12
Sziasztok!

Pár napja kezdtem el ismerkedni az apache mod_rewrite-al, és sajnos akadt pár gondom, és kérdésem vele kapcsolatban.

Az első ötletemet egy teljesen egyszerű oldalon próbáltam ki, ahol csak az URL szépítése volt a lényeg. Nagyjából működik is a következő kóddal:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9-]+)$ $1.php
</IfModule>
Az itthoni, és távoli szerveren tökéletesen működik, azonban kipróbáltam egy harmadikon is, ahol sajnos nem ment. A gond a következő, 404-es hibával lehal, pedig a fájl igenis létezik.

example.org/sample.php esetén 404-es hibakód, és hogy /home/example.org/sample.php nem létezik, pedig ott van.

RewriteRule ^([a-zA-Z0-9-]+)$ /$1.php
kóddal pedig megy.
Options FollowSymLinks
hiányára gondoltam. Mellesleg hogy tudom megnézni milyen Options van az adott könyvtáron apache szinten? Meg hogy AllowOverride-nál mit engednek és mit nem? :)

A másik gondom, hogy az itthoni szerver kivételével rossz hivatkozás esetén 404-es hibával áll le, nálam pedig 400-as, Bad Request-el. Hogyan tudnám javítani?

Elég sok, weblaboros és egyéb doksit és fórumtémát olvastam vele kapcsolatban, semmi eredmény, de lehet csak én voltam nagyon bamba.

Segítségeteket előre is köszönöm!
 
1

Ezt ajánlom

vbence · 2006. Aug. 2. (Sze), 16.11
A fenti kóddal nem tudom mi lehet a probléma, de igazából azt sem értem, hogyan működhet egyáltalán (így első ránézésre végtelen ciklust kéne generáljon).

Próbáld ezzel, ez egy picit cizelláltabb megoldás:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule .* $0\.php [L]
2

Sajnos

ada · 2006. Aug. 2. (Sze), 18.21
Köszönöm a választ, a Bad Request megoldódott, viszont még mindig nem értem hogy miért ment neten, és nálam meg nem.

A másik gond még mindig él, ugyanúgy "The requested URL /home/htdocs/.....hu/ada/sample.php was not found on this server." pedig ott van.
3

és rewrite nélkül?

vbence · 2006. Aug. 2. (Sze), 18.37
...ott van?
6

Végülis

ada · 2006. Aug. 2. (Sze), 19.59
Valóban nem olvastam el figyelmesen a hibaüzit, tehát maga az az URL nem létezik. De path-ként ott van. Már csak az a kérdés, miért kavar be az apache. Ha sample.php-t rewrite-olom sample.php-ra, akor sem megy, hibaüzi ugyanaz.
4

url != path

TeeCee · 2006. Aug. 2. (Sze), 18.39
The requested URL /home/htdocs/.....hu/ada/sample.php was not found on this server." pedig ott van.

Nem tudom, Te hogy vagy vele, de én /home/htdocs könyvtárat nem a weboldalam "alatt" tartom, hanem esetleg a gyökérben...
(ha még mindig nem látnád:
http://www.teecee.hu/home/htdocs/index.php != /home/htdocs/index.php
URL != path
)
5

Eh

ada · 2006. Aug. 2. (Sze), 19.56
Természetesen értem mire gondolsz nem most kezdtem, csak már pár órát olvastam a dologgal kapcs. és még mindig semmi eredmény. Így változik a dolog egy kicsit, igazad van. Egyébként ha elolvasod az eredeti problémát, látod hogy ugyanaz az oldal ugyanazokkal a Rewrite szabályokkal 3 szerver közül kettőn tökéletes, harmadikon pedig ezt csinálja.

Vázolom megint a gondomat:

example.org/sample.php - fájl létezik. A fentebb említett Rewrite szabályok egyikével sem megy az example.org/sample hivatkozás. Hibaüzenetként a szintén fentebb említett választ kapom a szervertől.
7

Szóval

vbence · 2006. Aug. 2. (Sze), 20.59
Ha aktív a rewrite akkor sem a /sample sem pedig a /sample.php nem működik. Ha nincs rewrite, akkor viszont megy. Így van?

B
8

Pontosan

ada · 2006. Aug. 2. (Sze), 21.20
Ha egy URL-re rá tudja húzni a rewrite szabályt, akkor hibás. Viszont ha nem a
RewriteRule .* $0\.php [L]
szabályt hanem a
RewriteRule .* /$0\.php [L]
-t használom akkor minden tökéletes. Hangsúlyozom ismét, csak ezen a szerveren van így.
9

fura

vbence · 2006. Aug. 3. (Cs), 11.55
Ha .htaccess-ben dolgozol, akkor ott relatív URL-ekkel működik a dolog. Az alsó szabály csak akkor működik, ha a .htacess fájlod konkrétan a legmagasabb könyvtárban (web gyökér) van.

Ha együttműködő a rendszergizda kérjél tőle egy RewriteLog fájlt valahova ahol látod...
10

Értem

ada · 2006. Aug. 3. (Cs), 12.24
Az ilyen jellegű alapokkal tisztában vagyok, a gond pontosan ott jön elő hogy nem mindehol gyökérben van a .htaccess. Persze itt jönne a megoldás hogy mindig írjam át, igen, nem rossz, de szerintem nem teljesen természetes hogy 5 szerverből 1-nél nem megy csak (azóta teszteltem még máshol is).
11

Univerzális mod_rewrite szabály

Anonymous · 2006. Okt. 8. (V), 21.16
Sziasztok!

Hosszas keresgélés után fordulok hozzátok:
egy olyan rewrite szabályt keresek, ami univerzálisan tudja átalakitani az url-t. Pl.
akarmi.hu/ertek1/ertek2/ ... /ertekn
alakú URL ből, ahol nincs előre megadva az értékek száma, olyat csinál, hogy:
akarmi.hu?param1=ertek1&param2=ertek2....&paramn=ertekn

Csinált valaki már ilyet?

Előre is kösz a válaszokat!
12

Nem, mert butaság

vbence · 2006. Okt. 9. (H), 18.14
A nagy barátságos-url-hype-ban se feletkezzünk meg arról, hogy a nevesített paraméterek könnyebbé teszik az életet! Olyan lapok, ahol csak egy paraméter van pl cikk.php?id=1 megszépíthetők rewriteal, de annak, amit te írsz le, semmi értelme.

Ha a konkrét esetről többet is elárulnál talán találunk megoldást.

Amúgy, ha jól látom, nem egy meglévő rendszert szeretnél átalakítani, hanem egy saját rendszerhez kéne a megoldás. Ha PHP-t használsz, miért nem darabolod fel egy tömbbe? $params = explode (" ", $_SERVER["REDIRECT_URL"]);

B
13

adtal egy jo otletet.

Anonymous · 2006. Okt. 9. (H), 20.46
Koszonom! igazad van, ezzel az otlettel pont meg tudom csinalni amit szeretnék.
14

Örülök :)

vbence · 2006. Okt. 10. (K), 09.16
Nalátod.. Cipőért a cipőboltba. :)
Természetesen (a fenti sajtóhibával ellentétben) erre gondoltam:
$params = explode ("/", $_SERVER["REDIRECT_URL"]);