• vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Hallo iedereen,

Ik ben bezig met het schrijven van een CMS. Hiervoor heb ik een bestand structuur bedacht.

Mijn vraag is nu, hoe kan ik (bijv. dmv. .htaccess) de client de normale (de standaard apache) 404 error weergeven als hij een map opvraagt die hij niet mag zien (zoals /cache/, /log/ etc.)?

Een 403 is niet zo moeilijk: order deny,allow deny from all, maar dan krijgt de gebruiker een 403 error, maar daar door weet hij wel dat de map bestaat, maar kan hij hem alleen niet opvragen. Ik wil dus juist dat hij een 404 krijgt, zodat hij niet weet dat die mappen bestaan (en dit maakt het moeilijker om er achter te komen of je met dit CMS te maken hebt).

Ik hoop dat jullie mij begrijpen.

  • Noork
  • Registratie: Juni 2001
  • Niet online
Redirect op b.v. index.php in die map?

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
http://nl2.php.net/manual/en/function.header.php

PHP:
1
2
header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");

  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Ik begrijp je niet helemaal?
Of bedoel je een Rewirite rule naar een bestand dat niet bestaat ofsow?

[EDIT]
Maar geeft zo'n header gegeven door php wel de default apache 404 error page, want ander kan je nog weten dat de map bestaat...

[ Voor 40% gewijzigd door vdvleon op 03-05-2009 20:45 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:12

Creepy

Tactical Espionage Splatterer

Probeer het eens en je weet het?

Je kan overigens ook prima een eigen 404 pagina tonen als de pagina echt niet bestaat. Dan zie je de default apache 404 soieso niet meer.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • digital-IMEI
  • Registratie: December 2005
  • Nu online
vdvleon schreef op zondag 03 mei 2009 @ 20:44:
Ik begrijp je niet helemaal?
Of bedoel je een Rewirite rule naar een bestand dat niet bestaat ofsow?
Dat is ook een mogelijkheid maar je kunt ook alle verkeer wat naar die mappen gaat waar ze niet mogen komen doorsturen naar je index.php (oftewel naar je homepage)
[EDIT]
Maar geeft zo'n header gegeven door php wel de default apache 404 error page, want ander kan je nog weten dat de map bestaat...
Nee de browser zal laten zien dat de opgevraagde pagina niet bestaat, dit is erg makkelijk te testen natuurlijk hè ;)

  • Cartman!
  • Registratie: April 2000
  • Niet online
Of je wijzigt gewoon de 403 pagina in de 404 pagina, of je stelt je webserver in dat ie 404 pagina weergeeft bij n 403 error. Kan allemaal...

  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Ik heb nu:

code:
1
RedirectMatch ^(.*)/cache/(.*)$ $1?p=Error404


Dus bijv.:
/path/to/site/cache/ -> /path/to/site/?p=Error404
/path/to/site/cache/bla -> /path/to/site/?p=Error404
etc.

Maar nu moet ik nog 1 ding oplossen, wat als iemand een pagina aanroept die ook echt neit bestaat, dus /path/to/site/onzin dan moet hij ook geredirect worden naar /path/to/site/?p=Error404 Doe doe ik dat?

Namelijk ErrorDocument 404 ?p=Error404 Is eigenlijk een rewrite rule in plaats van een redirect

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 07:07

Sebazzz

3dp

vdvleon schreef op zondag 03 mei 2009 @ 21:24:
Ik heb nu:

code:
1
RedirectMatch ^(.*)/cache/(.*)$ $1?p=Error404
Ik zou zowieso
code:
1
RedirectMatch ^/cache/(.*)$ $1?p=Error404
doen, als het CMS in de root van de publieke directory staat. Anders bijvoorbeeld: http://websitecms.nl/admin/view/log/5/ of http://websitecms.nl/forum/topic/25064/moderator/view/log/5/ geven dan 404's

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Je kan er ook voor kiezen om de cache en log directories buiten je document root te plaatsen. Dan zijn ze sowieso niet toegankelijk voor de webserver en krijg je automatisch een 404.

If I can't fix it, it ain't broken.


  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Dat klopt, maar op dit moment bijv. staat mijn cms niet in de root. maar je hebt idd een punt.
Dan zou ik toch de volledige url in de .htaccess moeten vermelden:

RedirectMath ^/path/to/site/cache/(.*)$ /path/to/site/?p=Error404

Dan moet ik maar met een script doe .htaccess generen. Of is er een mogelijkheid in apache config's (.htaccess) dat je de huidie directory kan opvragen (waar de .htaccess bestand in staat)? Want dan kan je gewoon redirecten naar: {HUIDIGE_HTACCESS_MAP}../?p=Error404

  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
@Borizz

De bedoeling is dat bijv. de source map, dus de framework/cms files in bijv. de map
/usr/share/cms_src/ komen te staan.

Voor elke 'site' kan je dan een map maken met dus de mappen: log, cache, pages, etc.
Volgensmij is het dan niet handig om die mappen weer op een andere plek te zetten. Dan word het heel onoverzichtelijk.

Het moet toch gewoon kunnen dat als je een url aan roept die niet bestaat, of niet mag gevonden worden, dat je dan word door gelinkt naar de root van de huidige 'site' met ?p=Error404 :S

  • Maghiel
  • Registratie: Maart 2004
  • Laatst online: 18:30
(Ik zeg niet dat dit een goede manier is maar)
Bij mij zelf gaat alles via een index.php. Die roept dan vanalles weer aan (niet zo boeiend), en als wat er in het path staat niet bestaat redirect hij dan naar een custom 404 pagina. Alles wat je dus in de url propt komt via index.php

En als je bv in ./cms je meuk hebt staan en je wilt het naar een script in de document root sturen doe je:
code:
1
2
3
4
5
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /cms/ [L]


Ik heb niet echt alles hierboven uitvoerig doorgelezen want heb aardig wat bier getikt ;)

[ Voor 4% gewijzigd door Maghiel op 03-05-2009 23:48 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17:00

.oisyn

Moderator Devschuur®

Demotivational Speaker

Cartman! schreef op zondag 03 mei 2009 @ 20:49:
Of je wijzigt gewoon de 403 pagina in de 404 pagina, of je stelt je webserver in dat ie 404 pagina weergeeft bij n 403 error. Kan allemaal...
De status die de browser terugkrijgt is dan echter nog altijd gewoon een 403. Het enige verschil is dat de pagina die eigenlijk bij de 404 hoort erbij wordt geserveerd, maar dat verandert de daadwerkelijke status verder niet.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Aangezien het over RewriteRules gaat en .htaccess in WSS horen ( Waar hoort mijn topic? )

PRG->WSS

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Volgens mij doe ik hier niks fouts, maar toch werkt het niet:

code:
1
2
3
4
5
6
7
8
9
10
11
# Set Env Base Var
setEnv BaseURL /vdCMS/

# Set Directory Options
Options -Indexes +FollowSymLinks

# Set Error Options
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{ENV:BaseURL}?p=Error404 [R=301]


Als ik dan naar de url http://example.com/vdCMS/asddgsdg dan stuurd hij hem door naar:
http://example.com/home/USER/httpdocs/vdCMS/?p=Error404

setEnv BaseURL /vdCMS/ werkt want in de $_SERVER var in php staat hij vermeld.
Hoe kan het dan dat %{ENV:BaseURL} niet word gelezen door RewriteRule :s

  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
Ik heb het opgelost.

In de root .htaccess staat:
code:
1
2
3
Options -Indexes +FollowSymLinks
ErrorDocument 404 /vdCMS/error.php
ErrorDocument 403 /vdCMS/error.php


In de sub-dirs .htaccess staat:
code:
1
2
3
RewriteEngine On
RewriteBase /vdCMS/
RewriteRule .* ./?p=Error404 [R=301]


In error.php staat dan:
PHP:
1
2
3
4
<?php
header('Location: /vdCMS/?p=Error404');
exit();
?>


Via een install script maak ik dan de .htaccess bestanden en het error.php bestand aan. Niet de manier die ik had gehoopt, maar het werkt.

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Kan je dan niet gewoon beter middels je .htaccess door verwijzen naar een nette 404, 403, noem ze maar op pagina sturen? Werkt volgens mij veel beter en is nog mooier ook en dat is wat Creepy ook bedoeld, want je ziet de standaard Apache error pages niet meer. :)

En als je wil dat niemand bij die mappen kan, maak dan ook een robots.txt bestand aan, anders kan men alsnog via Google bijvoorbeeld gewoon direct bestanden opvragen in die map. Met de robots.txt sloop je dat er ook uit. De map mag dan weliswaar niet opvraagbaar zijn, maar als ik je zo lees, de inhoud wel en dat is juist niet de bedoeling lijkt me als ik jou zo lees.

Ook kan je dan dus een eventuele dirlisting uitzetten (gaat middels .htaccess) maar hoe dit precies in zijn werk gaat, weet ik niet uit mijn hoofd.
vdvleon schreef op maandag 04 mei 2009 @ 17:33:
In error.php staat dan:
PHP:
1
2
3
4
<?php
header('Location: /vdCMS/?p=Error404');
exit();
?>
Vind ik anders een uiterst brakke oplossing. Waarom laat je error.php niet gewoon de foutafhandeling doen? Scheelt je weer een request en onnodig doorsturen.

[ Voor 22% gewijzigd door CH4OS op 04-05-2009 17:48 ]


  • vdvleon
  • Registratie: Januari 2008
  • Laatst online: 08-06-2023
De inhoud is dus juist niet leesbaar.
Door de:

RewriteEngine On
RewriteBase /vdCMS/
RewriteRule .* ./?p=Error404 [R=301]

Worden alles files en dirs in die map ook door gestuurd naar de error pagina.

En voor de rest, alles wat je zegt is al zo...

En header('Location: /vdCMS/?p=Error404'); vind ik opzich niet slordig. Hij linked gewoon door naar de CMS Error404 pagina. Op die manier maakt hij gebruik van de cms functionaliteit. Hij kan bijv. gebruik maken van mijn CMS log systeem etc.

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Je weet dat je in de location header een absolute URI mee moet sturen (dus incl. http://... etc)? Zie RFC 2616 14.30 Location.

Jou methode werkt in de meeste browsers (voor windows), maar in het verleden hebben Safari en Konqueror in ieder geval problemen gehad met relatieve URLs in een Location header (wellicht dat dat nu nog zo is aangezien het in de specificatie zo beschreven staat).

If I can't fix it, it ain't broken.

Pagina: 1