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?
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /index.php
    RewriteCond %{HTTP_HOST} ^www.realgameguides.com [NC]
    RewriteRule ^(.*)$ http://realgameguides.com/$1 [L,R=301]
     
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)(/([^/]+))? index.php?oldal=$1&aloldal=$3&%{QUERY_STRING}
    </IfModule>
Példa: realgameguides.com/google - ekkor a főoldalat hozná be.
 
1

RewriteCond

Poetro · 2012. Jan. 4. (Sze), 17.39
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
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?
switch ($_GET['oldal']) {
  case '' :
    // főoldal
    break;
  case 'egyik' :
    // egyik oldal
    break;
  case 'másik' :
    // másik oldal
    break;
  default:
    // 404
}
Nekem ez ugrott be tegnap este, de a fenti egyszerűbb:
if (isset ($_GET['oldal'])) {
  // switch elégazás, defaultja a 404 
} else {
  // főoldal
}
11

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

morocztamas · 2012. Jan. 11. (Sze), 19.03
<?php
  error_reporting (E_ALL);
  $oldal = isset ($_GET['oldal']) ? $_GET['oldal'] : 'nyitolap';
  $oldal = 'oldalak/' . basename($oldal) . '.php';
  $oldal = (file_exists ($oldal)) ? $oldal : 'oldalak/404.php';
  include $oldal;
?>
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.)