2014-01-08 7 views
5

Ich habe ein symfony2-Projekt auf einem Linux-Server entwickelt und habe es (leider!) Aus Gründen außerhalb meiner Kontrolle auf einen Windows-Server migriert. Dies funktioniert alles außer dem URL-Rewriting. Ich habe versucht, das IIS URL Rewrite Module zu verwenden, aber es scheiterte bei der Konvertierung der meisten Regeln (und ich habe dummerweise keine Liste davon gespeichert, bei denen es scheiterte).Wie htaccess-Regeln in web.config für IIS7/Symfony konvertiert werden?

Es funktioniert meistens gut, aber die app.php ist immer noch am Anfang aller URLs vorhanden, die es nicht sein sollte. Also die URLs sind domain.com/app.php/correct/path, wenn sie domain.com/correct/path sein sollten

Leider verwende ich selten Windows-Server und bin nicht gut in der Web.config-Syntax, so wenn jemand könnte vorschlagen, was fehlt, um die app.php von Anfang an alle URLs auf dem Windows-Server zu entfernen, dann wäre sehr dankbar!

Die ursprüngliche .htaccess-Datei ist:

DirectoryIndex app.php 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .? - [L] 

RewriteRule .? %{ENV:BASE}/app.php [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
<IfModule mod_alias.c> 
    RedirectMatch 302 ^/$ /app.php/ 
</IfModule> 
</IfModule> 

Die konvertierte Datei web.config ist zur Zeit:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="Imported Rule 1" stopProcessing="true"> 
       <match url=".?" ignoreCase="false" /> 
       <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" /> 
       </conditions> 
       <action type="None" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer> 
</configuration> 

Vielen Dank!

Dave

Antwort

4

Haben das gleiche Problem hat gerade während Symfony2 auf einem Windows-Server mit IIS7.5 einrichten. Der Trick ist, in Ihre Website-Management-Sektion zu gehen. Suchen Sie nach 'URL rewrite', suchen Sie nach 'Import Rules' (irgendwo auf der rechten Seite). Suchen Sie dann im neuen Dialog standardmäßig nach Ihrer .htaccess-Datei in 'SymfonyProject/web /'. IIS wird einen Fehler für die nachfolgende Schrägstrich-Regel auslösen, also löschen Sie das (Alles scheint ohne es gut zu funktionieren) und drücken Sie auf Anwenden. Viola keine app.php.

Achten Sie darauf, app.php zu Ihrer Liste der Standardseiten auch hinzuzufügen.

Ich habe die oben genannten mit der Standard-Datei htaccess im Lieferumfang von Symfony2.

EDIT wie gewünscht Unten

im Import-Dialog Ich habe:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/ <-This line needs deleting as IIS states "This directive was not converted because it is not supported by IIS: RewriteBase " 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ app.php [QSA,L] 
</IfModule> 

So der Anfang meiner web.config sieht wie folgt aus:

<defaultDocument enabled="true"> 
    <files> 
     <add value="app.php" /> 
    </files> 
</defaultDocument> 
<rewrite> 
    <rules> 
     <rule name="Imported Rule 1" stopProcessing="true"> 
      <match url="^(.*)$" ignoreCase="false" /> 
      <conditions logicalGrouping="MatchAll"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="app.php" appendQueryString="true" /> 
     </rule> 
    </rules> 
</rewrite> 

Auch habe ich mein Web-Verzeichnis als mein Stammverzeichnis.

Hoffe, das hilft. Doug.

+0

Danke für die Antwort doug, sehr geschätzt, obwohl dies genau das ist, was ich auch getan habe, aber es hat nicht alle Regeln aus irgendeinem Grund konvertiert. Wäre es möglich, dass Sie die resultierende web.config-Datei in Ihrer Antwort veröffentlichen, damit ich die spezifischen Regeln sehen kann, wäre es sehr hilfreich! Danke :) – deshg

+0

Habe meinen Beitrag mit mehr Details bearbeitet. – Doug

+0

Du bist eine Legende, danke Doug, die es gelöst hat.Jetzt, wo ich es ansehe, sind die fehlenden Elemente ziemlich offensichtlich, danke, dass sie mich aufgeklärt haben! – deshg

1

Ich weiß, das ist eine alte Frage, aber heute hatte ich das gleiche Problem und ich suchte überall und nahm mir viel Zeit, um es zu beheben, ersetzen Sie die .htaccess-Datei im Webverzeichnis zu web.config-Datei mit diesem Inhalt hoffe Das wird jemandem helfen.