ugrás a tartalomhoz

Rövid URL vs CodeIgniter

Pepita · 2012. Feb. 15. (Sze), 01.57
Sziasztok!

Rettentő tudatlan lehetek, elképzelhető, hogy csak kicsit el(be)néztem vmit, de úgy felidegesített, hogy aztán sehogy nem találom a megoldást.
CodeIgniter-el csináltam egy honlapot (localhoston), kicsit szívtam is a leírásában talált .htaccess ötlettel (1-el több / volt), de kis küzdés árán otthon jól ment. ("http://localhost/ezamappa/letoltes/xy.jpg", ahol "ezamappa" a project könyvtára)

Ám a szerveren behalt. Azt sikerült elérnem, hogy ne a böngésző dobjon hibát, hanem a szerver (oldal/könyvtár nincs olyan). Variáltam rajta sokat, bár őszintén szólva én nem vagyok egy regexp-guru, és az Apache beállítgatása is úgy megy, ha olvasok róla vmit, hogy "ebből a sorból vedd ki a #-et".

Íme a .htaccess:

php_value upload_max_filesize 200M
php_value post_max_size 240M
php_value max_input_time 240
php_value default_charset "utf-8"
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|images|js|css)
RewriteRule ^(.*)$index.php/$1 [L]
</IfModule>
Az IfModule nélkül is u.az a helyzet:
Nem az index.php-nak adja a paramétereket (pl. example.com/linkek), hanem - gyanítom - mégis mappát akar(na) nyitni helyette.
A szerver: php_info(). Bár - gondolom - a httpd.conf nem stimmel.

Persze írtam a szolgáltatónak is, de érteni is szeretném, hogy mi miért nem megy. Kérlek, segítsetek.

(Ezen a tárhelyen van Drupal6 is - tanulgatni -, az műxik "?q=" nélkül.)
 
1

Nekem úgy tűnik, a

Pepita · 2012. Feb. 15. (Sze), 13.40
"LoadModule rewrite_module modules/mod_rewrite.so"
lehet a probléma - httpd.conf - (egy helyen olvastam: "ebből vedd ki #-et"), még futkosom a köröket szolgáltatónál.
2

Ha van lehetőséged, kapcsold

Hidvégi Gábor · 2012. Feb. 15. (Sze), 13.48
Ha van lehetőséged, kapcsold be a Rewrite logot, 5-ös vagy 6-os értéken már eléggé bőbeszédű ahhoz, hogy lásd, mi is történik pontosan.
3

Sajna nincs

Pepita · 2012. Feb. 15. (Sze), 14.13
Nem férek se httpd.conf-hoz, se php.ini-hez, stb...
Vadul megpróbáltam .htaccess-ből, de 500 error.
Kezdek pipa lenni rájuk.
Írták: használjak RewriteBase / -t, jelezzek vissza (u.az), aztán ők nem jeleznek. Ápertén rákérdeztem tőlük arra, amit fentebb írtam, azóta semmi válasz. Legalább ha olvashatnám valahol ezeket a ... ini-ket meg conf-okat, akkor össze tudnám hasonlítgatni a sajáttal...

Köszi az ötletet.
4

Szokoz

janoszen · 2012. Feb. 15. (Sze), 15.20
TE figyu, ebben a sorban nem hianyzik egy szokoz?

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

Egyebkent az Apache ebbol a szempontbol netto szopatas, mert eleg nehez egy szolgaltatonak barmit logolni ilyen szinten anelkul, hogy szolgaltatas kieses lenne es ledosolna sajat magat.
5

Ha beírom a szóközt,

Pepita · 2012. Feb. 15. (Sze), 15.57
mindjárt a böngésző (most IE8) nem találja az oldalt (a főoldalt sem).

Szerk: csak ha utánaírom a domain-nek az index.php-t is. De ha index.php/ után adok még valamit, szintén nem találja.
6

# set the default

Tanul0 · 2012. Feb. 15. (Sze), 20.34

# set the default language
DefaultLanguage hu-HU

# set the default character set
AddDefaultCharset UTF-8

Options +FollowSymLinks 
Options -Indexes
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www.example.hu [NC] 
RewriteRule ^(.*)$ http://example.hu/$1 [L,R=301]

<IfModule mod_rewrite.c>  
	AddOutputFilterByType DEFLATE text/css application/x-javascript

	RewriteEngine on   
	RewriteBase /

	RewriteCond %{REQUEST_FILENAME} !-f   
	RewriteCond %{REQUEST_FILENAME} !-d   
	RewriteRule ^(.*) index.php?$1 [QSA]   
</IfModule>

# enable MD5 digests via ContentDigest
ContentDigest On

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript image/jpg image/jpeg image/gif image/png
</IfModule>
Nálam ez az egyetlen egy .htaccess ami még nem halt le egyetlen egy szerveren sem. Remélem segítettem.
7

Köszi, de u.az

Pepita · 2012. Feb. 15. (Sze), 21.14
Ezzel sem műxik, tényleg az lehet, hogy könyvtárnak nézi v. nem tom.
Érdekes, hogy ha az index.php elé beírom a szóközt, akkor helyből a böngésző ír üzit, nem a szerver. Ha a szóközt kihagyom, akkor a szerver "nem találja". Már a törpöm ki van velük.
8

Lehet, hogy tudom

Pepita · 2012. Feb. 15. (Sze), 22.25
LoadModule rewrite_module modules/mod_rewrite.so

Kicsit higgadtabban localhoston sikerült hasonló hibát kreálni ennek a sornak a #-val. Nagy Gusztáv Drupal6 könyvében olvastam erről.

Viszont ez a ... DataGlobe igencsak tojik a fejemre (ez itt az antireklám helye). Pedig nemrég még valamelyik fórumban pozitívan nyilatkoztam róluk. Szerintetek küldjek nekik - mondjuk 5 percenként - emlékeztető mail-eket az ő címükről? Ma 12.11 óta várom (és telefonálgatom), hogy válaszoljanak már a legutóbbi mailemre.
9

Próbáltad már ugyanazt a

Hidvégi Gábor · 2012. Feb. 15. (Sze), 22.35
Próbáltad már ugyanazt a szoftverkörnyezetet létrehozni, mint ami a DataGlobe-nál van? Elképzelhető, hogy ott régebbi Apache van, mint nálad, aminek a hibás működését az újabbal már nem lehet reprodukálni.
10

Nem, de közel azonos

Pepita · 2012. Feb. 15. (Sze), 22.47
Otthon: Apache 2.2.8, PHP 5.2.6, MySql 5.0.51a
DataGlobe: Apache 2.2.20, PHP 5.3.10, MySql 5.5.15.

Miben tud hibásan működni? Szerintem csak az az említett sor a ludas, bár a szóköz-dolog is gyanús egy kicsit. Kéne egy jó Apache-doksi, meg sok türelem...
11

A PHP 5.2 és 5.3 között kis

Hidvégi Gábor · 2012. Feb. 15. (Sze), 23.04
A PHP 5.2 és 5.3 között kis túlzással ég és föld a különbség, és ugyanez igaz a MySQL 5.0 és 5.5-re is. De én inkább az Apache-ot venném kezelésbe, szerintem ott lehet a bibi.

Közben megkerestem a saját .htaccess-emet, íme:
RewriteEngine On

RewriteCond %{REQUEST_URI}  !(i|css|js)/.*$
RewriteCond %{REQUEST_URI}  !(favicon.ico|robots.txt|sitemap.xml.gz|index.php)$
RewriteRule ^(.*)$ index.php?url=$1&%{QUERY_STRING}
12

Különbségek

Pepita · 2012. Feb. 16. (Cs), 14.10
Eddig nem volt különösebb gondom a különbségekből, korábban a szerveren még PHP 4.x volt, azzal is tudtam dolgozni (csak nagyon kellett olvasgatni a manual-t, mit lehet / mit nem).

A te .htaccess - eddel egy gondom van (és másikakkal is amit néztem):
A CodeIgniter tudtommal rendesen a querystring-ből "találja ki" a paramétereket, tehát nem jó neki a "index.php?url=$1" forma. Biztos meg lehetne oldani pusztán .htaccess-el is, de a CI megoldaná helyettem, ha megkapná a k*** querystring-et. De meg se kapja.

Emiatt nem műxik az egész oldal 2 napja. És persze ez a sajátom. Fent van a régi, de az gagyi, ezzel dolgoztam egy csomót, otthon tök jó, ezeknél meg nem. És maximum 1 e-mail-t válaszolnak naponta, de az is semmitmondó.

A CI saját doksijában ez van:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Nemigen szoktak ilyesmiben hülyeséget írni, nekem az index.php elől ki kellett vegyem a / jelet, akkor működött localhoston. A DataGlobe-nál meg sehogy, pedig már egy csomó dolgot próbáltam.

Tényleg jó lenne ilyenkor egy rewritelog, de sajnos tőlük nem remélhetek.
13

Nézd meg a $_SERVER tömb

Hidvégi Gábor · 2012. Feb. 16. (Cs), 14.18
Nézd meg a $_SERVER tömb tartalmát, abból kiderül, hogy pontosan milyen paramétereket kap a php.
14

Épp az, hogy semmilyet

Pepita · 2012. Feb. 16. (Cs), 15.38
Pont az a legnagyobb gond, hogy ha bármi van a domain után, nem indul el az index.php! Csak a hibafajták közt tudtam némi különbséget elérni, de az index.php-re csak paraméter(ek) nélküli domain-el jut el. Ha beírom kézzel pl.: "http://valami.hu/index.php?akarmi=xxx", akkor is elindul, de mivel "http://valami.hu/akarmi"* query-t vár a CI, ezzel nem kezd semmit, hanem az alapértelmezett oldalt mutatja. Pont az a baj, hogy meg kéne kapnia ez utóbbi (/ jeles) query-t, így: "http://valami.hu/index.php/akarmi", és ebből választaná ki a belső (php-n belüli) szabályok alapján, hogy mit csináljon. Ha megkapná a query-t, már boldogulnék vele.

* Ezt nem egészen pontosan írtam le. Összesen max 3(+) paramétert vár: Osztály, Függvény, Függvénynek Adandó Paraméter(ek) sorrendben. De ezen lehet variálni a belső routs-al.
15

Egyébként nekem egyre inkább

Hidvégi Gábor · 2012. Feb. 16. (Cs), 15.56
Egyébként nekem egyre inkább az a véleményem, hogy fölösleges ilyen dolgokkal bűvészkedni. Persze, valamennyit számít, ha az url-ben is vannak a tartalomra jellemző szavak, viszont amíg nem ismerjük pontosan a Google algoritmusát, csak találgatni tudunk. Szerintem a leginkább az számít, hogy magas látogatottságú, nagy értékű oldalak mutassanak a tiedre, a többi (meta tag-ek, címek stb.) elhanyagolható mértékben kerülnek bele a szorzóba.
16

Nem SEO szempont, nem felesleges

Pepita · 2012. Feb. 16. (Cs), 16.03
Hanem elsősorban most az, hogy az oldal nem műxik.
Elég sok átírkálást igényelne (összes link, stb.), hogy megcsináljam "csúnya URL-esre".

A "szép URL" ebben az esetben inkább "reklámszempont", mint SEO. A Júzerek is szeretik, pláne az esetleges megrendelők (fentebb írtam: ez az én honlapom).

Szóval annak érdekében, hogy egyáltalán működjön ez a sz.., nem felesleges.
17

Elnézést, hogy Up-oltam,

Pepita · 2012. Feb. 16. (Cs), 21.10
de nem volna valakinek esetleg arra ötlete, hogy mégis tudjak működő .htaccess-t csinálni, és CI-ben is menjen? Attól várnék választ, aki használ(t) is CI-t, mert az "index.php?akarmi=..." formához is valamiket állítani kell a CI-ben, de nem tudom miket.

Vagy mit és hogyan próbáljak (teszttel) a szerveren? Az (is) a gond, hogy sík ideg lettem ettől a DataGlobe-féle lesz...tól, ilyenkor semmi épkézláb ötletem sincs.
18

Megoldás!!!

Pepita · 2012. Feb. 17. (P), 00.48
1. Valóban kell a szóköz (asszem Janoszen írta), a szerveren azért vettem ki, mert így legalább szerverhibát adott, nem a "nagy fehér semmit".
2. Több helyen írtam QUERY_STRING-et - helytelenül, mert a fenti .htaccess alapján (ha pótoljuk a space-t) PATH_INFO vagy vmi más (pl. REQUEST_URI) keletkezik, de QUERY_STRING nem.
3. Valamiért (nem tudom az okát) a szerveren nem műxik az index.php/$1 jellegű paraméter (v. könyvtár) átadás.

A megoldás:
RewriteRule ^(.*)$index.php/$1 [L] sor helyett:
RewriteRule ^(.*)$ index.php?$1 [L].

Nem mertem ?-et tenni addig (nem is gondoltam rá), míg Hídvégi Gábor ötlete (köszi!) alapján ki nem írattam localhoston a QUERY_STRING-et. Meg is lepődtem, mert nem volt. Ez arra indított, hogy feltúrjam a CI URI-kezelő forráskódját (kemény volt), ott láttam, hogy - ha jól értettem - ha AUTO-ra van állítva az URI (URL) kezelés, akkor többféle mutatvánnyal próbál magának paramétereket "szerezni", szerepel köztük a QUERY_STRING, sőt, a $_GET tömb is. A doksijában nincs sok infó erről, csak az, hogy mindenképp
http://example.hu/(index.php/)class/method/otherparam
formájú URL-eket használ. A két infót összerakva rápróbáltam, hogy mi van, ha ?-el adom át a .htaccess-ben.
Bejött.

Mindenkinek nagyon köszönöm az ötleteket, bár senki sem találta el, mégis sokat segítettetek a megoldásban.

(Csak a k... DataGlobe szarik rá.)
19

Csak nézd meg az általam

Tanul0 · 2012. Feb. 17. (P), 09.54
Csak nézd meg az általam küldött .htaccess-t :)

Egyébként ?page=$1-re is nyugodtan átcsaphattad volna, mert $_SERVER['REQUEST_URI']-ba úgy is a szép url-ed kerül :)
20

Próbáltam is

Pepita · 2012. Feb. 17. (P), 12.33
és nem ment elsőre, már nem tudom, miért (lehet, akkor is kihagytam a SPACE-t). Azon kívül a tiéd alapból enged hozzáférni minden létező könyvtárhoz és fájlhoz, még az alkönyvtárakban lévő .htaccess-eket sem nézi elsőre (asszem ahhoz nagy -F, -D kellene). Jobb, ha csak a megadott könyvtárakra engeded rá. A lényeg, hogy így műxik. Köszi.
Egyébként ?page=$1-re is nyugodtan átcsaphattad volna
És a CI-nek is jó lesz? Eddigi ismereteim alapján ebben szkeptikus vagyok.