2014-01-08 86 views
5

我有一個在linux服務器上開發的symfony2項目,並且由於我的控制之外的原因,它已經將它遷移到了Windows服務器(不幸!)。除了url重寫之外,這一切都可以正常工作。我嘗試使用IIS URL重寫模塊,但在轉換大部分規則時失敗(並且我並未保存其失敗的列表)。如何將htaccess規則轉換爲IIS7/Symfony的web.config?

它大多工作正常,但app.php仍然存在於所有不應該是的URL的開始。所以這些網址是domain.com/app.php/correct/path時,他們應該是domain.com/correct/path

不幸的是,我很少使用Windows服務器,我不擅長web.config語法,所以如果任何人都可以建議從Windows服務器上的所有網址的開始刪除app.php缺少的東西,那將不勝感激!

原來的.htaccess文件是:

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> 

轉換的web.config文件是目前:

<?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> 

非常感謝!

戴夫

回答

4

剛過了同樣的問題,而使用IIS7.5在Windows服務器上設置的Symfony2。 訣竅是進入你的網站管理部分。尋找「網址重寫」,尋找「導入規則」(右側的某處)。然後在新的對話框中默認瀏覽'SymfonyProject/web /'中的.htaccess文件。 IIS會爲最後的斜線規則拋出一個錯誤,所以刪除它(一切看起來都沒問題)並按下apply。 Viola no app.php。

一定要將app.php添加到您的默認頁面列表中。

我使用Symfony2附帶的標準htaccess文件完成了上述操作。

編輯的要求下面

在導入對話框,我有:

<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> 

所以我的web.config的開頭是這樣的:

<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> 

而且我已經把我的網頁目錄作爲我的根目錄。

希望這會有所幫助。 Doug。

+0

感謝您的答案道格,非常感謝,雖然這正是我所做的,但它並沒有因爲某些原因轉換所有規則。是否有可能將結果web.config文件發佈在您的答案中,以便我可以看到具體的規則,這將是巨大的幫助!謝謝:) – deshg

+0

已編輯我的帖子更多的細節。 – Doug

+0

你是一個傳奇人物,感謝Doug解決了它。現在我看它,缺失的元素非常明顯,謝謝你的啓發! – deshg

1

我知道這是一個老問題,但今天我有同樣的問題,我到處搜索,並花了我很多時間來解決它通過替換web目錄中的.htaccess文件到web.config文件與此內容希望這將有助於某個人。

<?xml version="1.0"?> 
    <configuration> 
     <system.webServer> 
      <defaultDocument> 
       <files> 
        <clear /> 
        <add value="app.php" /> 
       </files> 
      </defaultDocument> 
      <rewrite> 
       <rules> 
        <rule name="Symfony Front Controller" 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> 
     </system.webServer> 
    </configuration> 
相關問題