Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[mod_rewrite] Problem mit [last] und [R=404]

Empfohlene Antworten

Veröffentlicht

Hallo.

Ich habe ein kleines Syntaxproblem in meiner mod_rewrite Konfiguration (local).

Zum Ergebnis:

.html Dateien sollen auf ein PHP Script intern umgeleitet werden um dynamische Seiten aus einer DB anzuzeigen

.htm Dateien sollen intern auf die entsprechenden .php Dateien umgeleitet werden

.php Dateien dürfen nicht aufrufbar sein

Zu dem letzten Punkt bitte keine Anmerkungen. Nur soviel von einem "Experten" an mich:

Die Hacker sollen nicht wissen, dass es PHP Scripte sind

*Beleidigung* Der meint wohl cracker Kekse... ;) Na ja. So sind sie, unsere "Experten"

Zu meiner (gedachten) Umsetzung:

# mod_rewrite

RewriteEngine On

 # Zugriff auf PHP Dateien nur via ".htm"

    RewriteRule ^(.*).html$ script.php?variable=$1 [last]

 # Zugriff auf PHP Dateien nur via ".htm"

    RewriteRule ^(.*).[COLOR="Orange"]ht***[/COLOR] $1.php [last]

 # Direktzugriff auf PHP Dateien unterbinden

    RewriteRule ^(.*).php$ $1.php [R=404,last]

Die erste Direktive wurde leicht angepasst...

an ADMIN:

Ist die alte DOS 3er Endung von .html wirklich so verfassungswidrieg, dass diese auf den Index bei euch kommt?? -> ht***

Nach meiner Logik geht mod_rewrite von oben nach unten die Direktiven durch. Also am Beispiel

Domain: wwi.de (was weiß ich ;) )

Fall 1

Ergebnis: 404

Resultat: Korrekt

Fall 2

Ergebnis: eine Seite aus der DB

Resultat: Korrekt

Fall 3

Ergebnis: 404

Resultat: Fehler (hierüber sollte das PHP Script aufrufbar sein)

Ich würde das so ung. machen:


RewriteEngine On


# HTML-Dateien

RewriteCond %REQUEST_URI% (.*)\.htm[l]?$ [NC]

RewriteRule (.*)\.htm[l]?$ $1.php [QSA,L]

# PHP-Dateien

RewriteCond %REQUEST_URI% (.*)\.php$ [NC]

RewriteRule (.*) - [F,L]

Eine Anfrage auf index.html wird auf index.php umgeleitet

Eine Anfrage auf index.htm wird auf index.php umgeleitet

Eine Anfrage auf index.php bekommt eine Forbidden-Meldung

Dabei musst du aber sehen, dass du in deinen Skripten alle Links dann als html ausgibst und musst evtl. auch Dateinamen bzw. Endungen ersetzen etc.. Je nachdem wie die Skripte halt aufgebaut sind.

Ansonsten: Das ist Blödsinn.

1. Ist es keine Sicherheitslücke, wenn der draußen weiß, dass da PHP läuft.

2. Muss dann auch die Meldung vom Web-Server angepasst werden, dass der nicht mitteilt, dass er PHP laufen lassen kann.

3. Wenn z.B. Session Cookies gesetzt werden, weiß der geneigte Angreifer, dass ihr PHP verwendet.

4. Wenn generell Cookies gesetzt werden, weiß der geneigte Angreifer, dass wohl kaum statische HTML-Seiten verwendet werden.

5. Wenn der Angreifer merkt, wie "toll" ihr eure Seite schützt, ist er vielleicht eher der Meinung, er könnte es da mal probieren. Denn:

6. Wenn ihr hier so "professionell" vorgeht, findet er bestimmt woanders ne Lücke die offen ist.

7. Sicher ist es, wenn es keiner kann, nicht wenn es keiner weiß!

Hi,

erstmal vielen Dank,

mod_rewrite hat mich bisher so interessiert, dass ich einfache URLs umkonvertiere.

Ich habe da nur ein kleines Problem bei deienm Script...

- Ich benötige eine exakte Unterscheidung von .html und .htm Dateien.

Die .html Dateien werden anders aufgerufen. Wie bei Blogs mit Kategorien und so...

Die .htm Dateien sind die "direkten" Zugänge zu den PHP Scripten.

- Zum Thema PHP... Es "muss" Code 404 rüberkommen. R=404. Das kann ich noch grade selber *freu*

1. Ist es keine Sicherheitslücke, wenn der draußen weiß, dass da PHP läuft.

2. Muss dann auch die Meldung vom Web-Server angepasst werden, dass der nicht mitteilt, dass er PHP laufen lassen kann.

3. Wenn z.B. Session Cookies gesetzt werden, weiß der geneigte Angreifer, dass ihr PHP verwendet.

4. Wenn generell Cookies gesetzt werden, weiß der geneigte Angreifer, dass wohl kaum statische HTML-Seiten verwendet werden.

5. Wenn der Angreifer merkt, wie "toll" ihr eure Seite schützt, ist er vielleicht eher der Meinung, er könnte es da mal probieren. Denn:

6. Wenn ihr hier so "professionell" vorgeht, findet er bestimmt woanders ne Lücke die offen ist.

7. Sicher ist es, wenn es keiner kann, nicht wenn es keiner weiß!

Ich weiß, ich weiß. Die Entscheidung lasse ich meinem spezialisten "Experten" der anscheint der große Kekse versteher ist (siehe ersten Post wg Keksen) ;) Und so kleine FISIs und FIAEs und studierte INFOs doch gar nichts von der Materie bzw. Realität verstehen. :bimei Nur so viel, fast - oder alle - können Hacken (legal)... Aber wir wissen ja nichts :floet: :uli an die "Experten"

Ich würde das so ung. machen:


RewriteEngine On


# HTML-Dateien

RewriteCond %REQUEST_URI% (.*)\.htm[l]?$ [NC]

RewriteRule (.*)\.htm[l]?$ $1.php [QSA,L]

# PHP-Dateien

RewriteCond %REQUEST_URI% (.*)\.php$ [NC]

RewriteRule (.*) - [F,L]

Was für eine Flag ist
[QSA]
? Das gleiche wie
[redirect]

?

Was für eine Flag ist
[QSA]
?
QSA = QueryStringAppend. Also den Query-String aus der urspr. Anfrage an die neue Anhängen. Der Query-String ist alles das was nach dem ? in der URL kommt. Wenn du html und htm unterscheiden musst, das ganze einfach in 2 Conditions aufteilen ;) Also

RewriteCond %REQUEST_URI% (.*)\.html$

...

RewriteCond %REQUEST_URI% (.*)\.htm $

EDIT:

Das m gefolgt von einem $ wird hier zensiert (Microsoft sei Dank :D ). Hatte mich schon über deinen Code gewundert ;)

Also oben das Leerzeichen vor dem zweiten $ wegdenken.

Hi,

also jetzt noch mal kurz für mich...

"RewriteCond" definiert die Datenherkunft...

"RewriteRule" definiert die Aktion die von der Datenherkunft (einem oder mehreren oberen RewriteCond Definitionen) beschrankt werden.

RewriteRule = RewriteCond + [action] + [flags]

oder

RewriteCond = [lockment rule]

RewriteRule = "(.*)" + [action] + [flags]

"RewriteCond" definiert die Datenherkunft...

RewriteCond ist einfach eine Bedingung die Erfüllt werden muss (Cond = Condition). Nur wenn alle Bedingungen erfüllt sind, wird die folgende Rule angewandt.

Die Rule definiert nicht nur ein .* (generell die komplette URI), sondern genauso wie in der Condition einen regulären Ausdruck und danach die Umschreibung.

siehe z.B.

modrewrite.de | mod_rewrite & .htaccess (Apache Server)

Oder entsprechende Literatur.

Hi.

Ist das korrekt?

# mod_rewrite

  RewriteEngine On


  # HTM-Dateien: Zugriff auf PHP Scripte

    RewriteCond %REQUEST_URI% (.*)\.htm?$ [NC]

    RewriteRule (.*)\.htm?$ $1.php [QSA,L]

  # HTML-Dateien: Seiten aus Datenbank

    RewriteCond %REQUEST_URI% ^/(.*)/(.*)\.html?$ [NC]

    RewriteRule ^/(.*)/(.*)\.html?$ /script.php?category=$1&page=$2 [L]

  # PHP-Dateien: "Existiert nicht" zurückgeben

    RewriteCond %REQUEST_URI% (.*)\.php?$ [NC]

    RewriteRule (.*)\.php?$ $1.php [QSA,L,R=404]

Ist das korrekt?

Das wird dir der Apache sagen, wenn er keinen Server-Fehler zurückgibt ;)

Auf den ersten Blick konnt ich keinen groben Fehler erkennen...

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.