2 votes

Problèmes d'importation de .htaccess dans IIS URL Rewrite Web.Config

J'essaie d'importer .htaccess dans la règle de réécriture d'URL dans IIS 7.

Le fichier actuel de Symfony 2 ne peut être importé dans IIS. J'ai besoin de l'aide de quelqu'un qui connaît la syntaxe pour traduire le fichier en quelque chose d'utilisable par IIS, en faisant appel au fait que ce travail aiderait tout futur utilisateur de Symfony 2 dans IIS.

Je m'excuse de ne pas connaître la syntaxe d'IIS et j'ai ajouté le fichier original. /web/.htaccess en excluant tous les commentaires pour des raisons de commodité.

Merci d'avance

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>

la sortie d'erreur actuelle est la suivante :

<rewrite>
  <rules>
    <!--The rule cannot be converted into an equivalent IIS format because of unsupported flags: E-->
    <!--This rule was not converted because it contains references that are not supported: 'ENV::BASE'-->
    <rule name="Imported Rule 3" stopProcessing="true">
      <match url=".?" ignoreCase="false" />
      <conditions>
        <!--# If the requested filename exists, simply serve it.-->
        <!--# We only want to let Apache serve files and not directories.-->
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
      </conditions>
      <action type="None" />
    </rule>
    <!--This rule was not converted because it contains references that are not supported: 'ENV::BASE'-->
  </rules>
</rewrite>

Merci d'avance

3voto

Rik Points 31

Si vous exécutez le fichier app.php à partir de la racine du domaine ( http://domain.tld/app.php ) que vous pouvez supprimer les variables ENV:BASE. Vous obtiendrez ainsi le XML suivant à importer dans IIS :

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^app\.php(/(.*)|$)" ignoreCase="false" />
      <action type="Redirect" redirectType="Permanent" url="/{R:2}" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url=".?" ignoreCase="false" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
      </conditions>
      <action type="None" />
    </rule>
    <rule name="Imported Rule 3" stopProcessing="true">
      <match url=".?" ignoreCase="false" />
      <action type="Rewrite" url="/app.php" />
    </rule>
  </rules>
</rewrite>

Edit : à partir d'un sous-répertoire, cela devrait fonctionner je crois (le sous-répertoire étant "foo") :

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^app\.php(/(.*)|$)" ignoreCase="false" />
      <action type="Redirect" redirectType="Permanent" url="foo/{R:2}" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url=".?" ignoreCase="false" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
      </conditions>
      <action type="None" />
    </rule>
    <rule name="Imported Rule 3" stopProcessing="true">
      <match url=".?" ignoreCase="false" />
      <action type="Rewrite" url="foo/app.php" />
    </rule>
  </rules>
</rewrite>

Il y a peut-être une meilleure façon de procéder avec des variables, mais je n'ai utilisé que l'URL Rewrite de IIS avec des importations de mod_rewrite. Je ne connais donc pas la syntaxe de ces dernières :)

0voto

MrFlo Points 45

Ou vous pouvez installer la réécriture d'isapi - pas besoin de traduire -. http://www.helicontech.com/isapi_rewrite/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X