Fórumok
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.
A fenti PHP-s megoldással az a gond, hogy minden fájlba be kellene tenni. A mod_rewrite pedig tudtommal csak azokban az esetekben működik, ha fizikailag nincs ott a fájl. Most pedig ott van.
--
Kum G.
Linux pólók HUP pólók Debian tanga
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
nézz meg egy mediawikit, ott is minden az index.php-ból indul ki
index.php/valami_aloldal
--
A legértékesebb idő a pillanat amelyben élsz.
https://sites.google.com/site/jupiter2005ster/
+ ezt kiegészítve egy megfelelő mod_rewrite-ál használhatod a sokkal szebb domain.tld/valami_aloldal/valami funkcio linkeket, a háttérben mind átfordítva index.php-ra és majd ott lekezeled, milyen URL-re mi is történjen.
+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.)
Köszönöm, úgy tűnik ez lesz a jó megoldás.
--
Kum G.
Linux pólók HUP pólók Debian tanga
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
+1 a RewriteEngine irányba, nekem is bevált.
Sakk-matt,
KaTT :)
Próbálnám elkerülni, hogy minden egyes URL-t egy fájl szolgáljon ki, de ahogy nézem ez lesz belőle.
--
Kum G.
Linux pólók HUP pólók Debian tanga
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/
Értem én, használom is, de csak nem létező fájlok esetén. Attól idegenkedek, hogy minden fájlra ez menjen.
--
Kum G.
Linux pólók HUP pólók Debian tanga