thisischris
Goto Top

Windows IIS 10 Webserver URL Rewrite funktioniert nicht

Guten Abend zusammen,

ich bräuchte mal eure Hilfe.

Folgende Situation:

Ich habe eine Website erstellt und veröffentlicht. Alles soweit gut.

Was nicht funktioniert ist die "pretty url". Ich bekomme die .php Dateiendung nicht raus, trotz URL Rewrite Rule.

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Web-URL-ReWrite" stopProcessing="true">  
          <match url=".*" />  
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />  
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />  
          </conditions>
          <action type="Rewrite" url="/" />  
        </rule>
      </rules>
      <outboundRules>
        <rule name="Outbound" enabled="true">  
          <match filterByTags="A, Form, Img" pattern="^(.*)\.php$" />  
          <action type="Rewrite" value="{R:1}" />  
        </rule>
      </outboundRules>
    </rewrite>
  </system.webServer>
</configuration>

Ich habe keine Ahnung mehr was ich tun soll.

Ich hoffe ihr habt eine Idee.

Ich danke euch im voraus!
Kommentar vom Moderator Dani am May 07, 2024 um 17:01:04 Uhr
Titel korrigiert. Aus redirect wurde rewrite.
zudem die Domain entfernt. Damit mögliche Hacker nicht noch ein Ziel frei Haus geliefert bekommen.

Content-Key: 61457078603

Url: https://administrator.de/contentid/61457078603

Printed on: July 24, 2024 at 15:07 o'clock

Member: Dani
Dani May 07, 2024 at 17:33:03 (UTC)
Goto Top
Moin,
Ich habe keine Ahnung mehr was ich tun soll.
dann mache ich mich unbeliebt. An Hand deiner Frage bin ich mir nicht sicher, ob das Wissen und Zeit hast, einen Windows Server mit einer relativ anfälligen Software am Internet zu betreiben. Wenn du nicht das kleine 1x1 beachtest ist dein Server schneller in fremden Hände wie es dir lieb ist. Und eine Webseite mit einen Standard PHP ohne Einschränkungen reicht in der Regel schon aus.

Unabhängig davon du hast das notwendige Modul (https://www.iis.net/downloads/microsoft/url-rewrite) vorab installiert? Ansonsten schau dir mal diese Konfiguration an.


Gruß,
Dani
Member: ThisIsChris
ThisIsChris May 07, 2024 at 18:36:32 (UTC)
Goto Top
Erstmal Danke für deine Antwort.

Machst du dich nicht, keine Sorge! ;)

Auf jeden Fall hatte ich mal genug Zeit und Wissen um den Windows Server an den Start zu bringen. Das der Server hinter einer Firewall - mit all möglichen Webserverschutz hängt - wird mir dann auch nichts bringen, wenn ich das richtig verstehe. Davon abgesehen wurden diverse Sicherheitsvorkehrungen getroffen und das Personal geschult ;)

Aber für weitere Tipps in diese Richtung bin ich immer offen.

Ja, dass Modul ist installiert und danke für den Link, der hat mir leider nicht geholfen.

Gruß Chris
Member: NordicMike
NordicMike May 08, 2024 at 05:10:34 (UTC)
Goto Top
den Link, der hat mir leider nicht geholfen
Doch, die Infos im Link funktionieren.

Ich bekomme die .php Dateiendung nicht raus
Welche URL gibst du ein und welcher Pfad wird geöffnet?
Eigentlich benötigt man für PHP Dateien keine Rewrite Rule. Der IIS versucht diese automatisch, wenn keine .htm oder .html Datei vorhanden ist:

http(s)://domain/ -> http(s)://domain/index
http(s)://domain/index -> http(s)://domain/index.htm
http(s)://domain/index -> http(s)://domain/index.html
http(s)://domain/index -> http(s)://domain/index.php

Solltest du also http(s)://domain/ eingeben, rufst du automatisch die http(s)://domain/index.php auf, wenn diese index.php existiert (und die anderen nicht).

Die Kette oben ist vereinfacht dargestellt, die detailliertere Kette findest du im IIS Manager unter dem Button "Standarddokument".
Member: ThisIsChris
ThisIsChris May 08, 2024 at 05:39:57 (UTC)
Goto Top
Guten Morgen,
vielen Dank für deine Antwort.

Wenn ich xyz.de aufrufe kommt auch meine index.php, ist ja auch so in den Standard Dokumenten vom IIS ganz oben hinterlegt.

Wenn ich aber über die Navigation eine andere Seite aufrufen möchte, z.B xyz.de/kontakt, dann steht in der URL xyz.de/kontakt.php und ich hätte aber gern das da xyz.de/kontakt steht.

Mit der Regel komme ich zwar über die Eingabe im Browser mit xyz.de/kontakt auf xyz.de/kontakt.php, sobald ich aber über die Navigation eine andere Seite aufrufe erscheint die im Browser wieder mit der .php Endung.
Member: ThisIsChris
Solution ThisIsChris May 08, 2024 at 08:48:21 (UTC)
Goto Top
Problem gelöst!

Es fehlte die Ausgehende Regel die die .php Endung entfernt bevor Sie an den Client geschickt wird.

Hier die Regel die bei mir zum Erfolg geführt hat:

<?xml version="1.0" encoding="UTF-8"?>  
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Hide PHP extension" stopProcessing="true">  
                    <match url="^(.+)\.php$" />  
                    <action type="Rewrite" url="{R:1}" />  
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />  
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />  
                    </conditions>
                </rule>
                <rule name="Redirect to PHP" stopProcessing="true">  
                    <match url="^(.+)$" />  
                    <conditions>
                        <add input="{REQUEST_FILENAME}.php" matchType="IsFile" />  
                    </conditions>
                    <action type="Rewrite" url="{R:0}.php" />  
                </rule>
            </rules>
	    <outboundRules>
		<rule name="Outbound" enabled="true">    
          	<match filterByTags="A, Form, Img" pattern="^(.*)\.php$" />    
          	<action type="Rewrite" value="{R:1}" />    
        	</rule>
      	    </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

Vielen Dank an alle die sich dem Thema angenommen haben.
Schönen Feiertag allen.