Apache: valami.php/ hogyan kezelhető normálisan?

Sziasztok!

Akadt egy olyan problémám az egyik webszerveremen (Debian+Apache), hogy ha a látogató egy tetszőleges PHP fájlnál

http://valami.hu/oldal.php

helyett

http://valami.hu/oldal.php/

ír be, akkor is betölti az oldal.php-t. Ilyenkor a relatív linkek miatt sok minden nem működik, ezért azt szeretném, hogy vagy automatikusan dobja át a / jel nélküli címre, vagy kapjon 404-et.
Hogyan tudom ezt globálisan megoldani? Tipp? Ötlet?

Hozzászólások


if (substr($_SERVER["REQUEST_URI"],-1) === "/"){
header("Location: ".substr($_SERVER["REQUEST_URI"],0,-1));
exit();
}

De az igazi megoldást a mod_rewrite használata jelenti, és a közös belépési pont.

Ezért írtam a közös belépési pontot, minden kérés egy fájlhoz fusson be, és onnan eldöntheted hogy mit futtatsz le (routing). Vagy beírod ezt egy php fájlba és mindenhová beincludeolod.
A mod_rewrite-nál a "RewriteCond %{REQUEST_FILENAME} !-f" vizsgálja a fájl létezését, ha ezt a sort kihagyod, akkor minden fájlra teljesül a RewriteRule. Ugyanígy lehet olyan condition-t írni, hogy csak a php-ra vonatkozzon.

+1, és még egy észrevétel arra, hogy "minden file elejére be kéne rakni", ha ezzel újat mondok esetleg, célszerű valami minden file által includeolt közös filet csinálni, ennek ezen a redirect megoldási lehetőségen kívül ezer fontosabb oka is van (logolás, autoinclude, adatbázis, includeok, konstansok, stb.)

Egy alternatív megoldás: "AcceptPathInfo off". Ugyanitt láthatod, hogy ha be van kapcsolva, akkor a PATH_INFO környezeti változóval le tudod kezelni PHP oldalról is. Normális keretrendszerekben pl. így működik. Magánvéleményem szerint, aki kézzel gépel be URL-t, ne lepődjön meg, ha hibakódot kap rá, ugyanakkor értelmes helyeken még jobb, ha "szép" URL-eket használsz, és rewrite-tal kezeled az összes URL-t.

--

Üdv,

nálam ez megoldja:

.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

php-ben pedig $_SERVER["REQUEST_URI"] -ból döntöm el hogy mi volt az eredeti query

KoviX

Nem a fájl szolgálja ki, ő csak továbbítja a "kéréseket".
Nem hülyeség ez, ha jól oldod meg: a (jelenlegi) index.php fájlod az uri alapján osztja ki a munkát különböző osztályoknak (MVC-ben a controllereknek).
http://www.janoszen.com/2013/01/08/writing-modern-day-php-applications/