ugrás a tartalomhoz

Szép címek mellett a 404-es hiba oldal nem jön be

morocztamas · 2012. Jan. 4. (Sze), 17.31
Miért van az, hogy a következő forrás tökéletesen működik, de a gyökér könyvtárban lévő .htaccess-ben megadott 404-es hibaoldalt se a főhonlapon, se az alhonlapcímeken nem hozza be?
  1. <IfModule mod_rewrite.c>  
  2. RewriteEngine On  
  3. RewriteBase /index.php  
  4. RewriteCond %{HTTP_HOST} ^www.realgameguides.com [NC]  
  5. RewriteRule ^(.*)$ http://realgameguides.com/$1 [L,R=301]  
  6.    
  7. RewriteCond %{REQUEST_FILENAME} !-f  
  8. RewriteCond %{REQUEST_FILENAME} !-d  
  9. RewriteRule ^([^/]+)(/([^/]+))? index.php?oldal=$1&aloldal=$3&%{QUERY_STRING}  
  10. </IfModule>  
Példa: realgameguides.com/google - ekkor a főoldalat hozná be.
 
1

RewriteCond

Poetro · 2012. Jan. 4. (Sze), 17.39
  1. RewriteCond %{REQUEST_FILENAME} !-f    
  2. RewriteCond %{REQUEST_FILENAME} !-d    
  3. RewriteRule ^([^/]+)(/([^/]+))? index.php?oldal=$1&aloldal=$3&%{QUERY_STRING}    
miatt mindenképpen az index.php hívódik meg, mivel nem létezik a google fájl vagy könyvtár.
2

És mivel küszöbölhetem ki,

morocztamas · 2012. Jan. 4. (Sze), 17.45
És mivel küszöbölhetem ki, vagyis, hogy a 404-es Apache utasítás által megadott 404-es oldal jöjjön be?
3

Saját

Poetro · 2012. Jan. 4. (Sze), 18.11
Ebben az esetben neked kell megoldanod az index.php-ban, hogy azt a dokumentumot szolgáld ki, amelyiket szeretnéd.
4

Akkor 404-es oldal

morocztamas · 2012. Jan. 4. (Sze), 19.39
Akkor 404-es oldal fölösleges? És ha igen, akkor PHP-ban hogyan oldom ezt meg, ha nem létezik a lekért oldal?
5

Gondolkozz picit. Ez

Hidvégi Gábor · 2012. Jan. 4. (Sze), 20.10
Gondolkozz picit. Ez ugyanolyan tartalmi oldal, mint a többi (pl. egy cikk).
6

De ha nem létezik, akkor nem.

morocztamas · 2012. Jan. 6. (P), 12.09
De ha nem létezik, akkor nem. Ezért nem tudok hozzákezdeni se.
7

Nem létezik

Poetro · 2012. Jan. 6. (P), 12.11
Ha ugye nem találod azt az oldalt az index.php-ban, akkor kiadod a megfelelő HTTP fejlécet (ebben az esetben 404), és kiírod, hogy az oldal nem létezik. Nincs további trükk.
8

De hogyan? Mert switch-ben

morocztamas · 2012. Jan. 6. (P), 12.16
De hogyan? Mert switch-ben nem rakhatom a default-ba, mert akkor nincs főoldal. Meg akkor meg sem tudom csinálni, hogy a mostani (http://realgameguides.com/404.html) legyen a hiba oldal?
9

főoldal

Poetro · 2012. Jan. 6. (P), 12.58
Mi határozza meg, hogy mi a főoldal? Mert mondjuk tegyük fel, ha az oldal üres, akkor az a főoldal. Innentől kezdve már tudod, melyik NEM a főoldal. Azaz a default-ra mehet a 404-re.
10

Akkor így kellene

morocztamas · 2012. Jan. 7. (Szo), 11.53
Akkor így kellene kinéznie?
  1. switch ($_GET['oldal']) {  
  2.   case '' :  
  3.     // főoldal  
  4.     break;  
  5.   case 'egyik' :  
  6.     // egyik oldal  
  7.     break;  
  8.   case 'másik' :  
  9.     // másik oldal  
  10.     break;  
  11.   default:  
  12.     // 404  
  13. }  
Nekem ez ugrott be tegnap este, de a fenti egyszerűbb:
  1. if (isset ($_GET['oldal'])) {  
  2.   // switch elégazás, defaultja a 404   
  3. else {  
  4.   // főoldal  
  5. }  
11

Megírtam a működőképes forrást!

morocztamas · 2012. Jan. 11. (Sze), 19.03
  1. <?php  
  2.   error_reporting (E_ALL);  
  3.   $oldal = isset ($_GET['oldal']) ? $_GET['oldal'] : 'nyitolap';  
  4.   $oldal = 'oldalak/' . basename($oldal) . '.php';  
  5.   $oldal = (file_exists ($oldal)) ? $oldal : 'oldalak/404.php';  
  6.   include $oldal;  
  7. ?>  
12

Ezzel óvatosan, semmi nem

bugadani · 2012. Jan. 11. (Sze), 22.29
Ezzel óvatosan, semmi nem akadályozza meg, hogy oldal=../config.php vagy hasonló jellegű gonoszságokat műveljenek, effektíve érzékeny adatok kerülhetnek ki oda, ahova nem kéne nekik.
13

basename függvény

morocztamas · 2012. Jan. 11. (Sze), 22.36
Az pont erre van. (Javíts ki, ha tévedek.)