2011-03-23 124 views
5

我有一個codeigniter應用程序,可以在WAMP本地工作。但是,我無法使其在IIS服務器上運行。請注意,我不想啓用查詢字符串。IIS上的Codeigniter 2和web.config文件

這是我目前在我的web.config文件:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Clean URL" 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="index.php/{R:1}" appendQueryString="false" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

這將導致主要頁面正常加載:www.website.com/policies

然而,當我點擊一個項目去:www.website.com/policies/policy/view/31

正確的頁面不顯示。主頁面繼續顯示。

控制器是Policy且函數是view()。 Codeigniter文件位於服務器上的策略/文件夾中。

我認爲這個問題可能與我的web.config文件。配置文件的$ config ['base_url']是動態計算的,並且是正確的。配置文件的$ config ['index_page']爲空。你認爲是什麼造成這個問題?

謝謝大家的幫助。

+0

做完在服務器上,它看起來像URL重寫器已設置。這裏是它的信息: _SERVER [「IIS_UrlRewriteModule」] \t 7.1.0761.0 – stevetronix 2011-03-23 18:27:38

回答

28

你看看CI論壇的例子嗎?

http://codeigniter.com/forums/viewthread/91954

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Rewrite to index.php"> 
        <match url="index.php|robots.txt|images|test.php" /> 
        <action type="None" /> 
       </rule> 
       <rule name="Rewrite CI Index"> 
        <match url=".*" /> 
        <conditions> 
         <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html" negate="true" /> 
        </conditions> 
        <action type="Rewrite" url="index.php/{R:0}" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
+3

謝謝Jakub。我只是想分享我的問題的解決方案。在config.php文件中,$ config ['uri_protocol']被設置爲'QUERY_STRING'。我將它改爲$ config ['uri_protocol'] ='AUTO'。然後,我改變了的web.config規則: <規則名稱= 「MyRule的」> <匹配URL = 「(。*)^ $」/> <添加輸入= 「{} REQUEST_FILENAME」 使用MatchType = 「IsFile」negate =「true」/> stevetronix 2011-03-24 22:06:36

+1

@stevetronix謝謝你做到了。你節省了我的10分鐘。 – 2013-09-12 13:32:02

+2

事實上,否定匹配模式將提供匹配請求中的任何地方的字符串,你可能不需要。對於帶有這些擴展名的靜態文件,正確的正則表達式是:'pattern =「^。+ \。(css | js | jpg | jpeg | png | gif | ico | htm | html | eot | woff | ttf | svg | txt)$ 「negate =」true「' – Ade 2013-10-15 14:20:20

2

原來我沒有安裝重寫。這奏效了:

http://www.iis.net/downloads/microsoft/url-rewrite

我不知道,如果CodeIgniter的錯誤頁面可能有所掩蓋錯誤,因爲我不能確定它是不是從瀏覽器的錯誤屏幕安裝。此外事件查看器,IIS日誌和PHP日誌都對這種情況沒有幫助。

2

Uff !!!哦!天哪!!!

最近我做了一個管理控制面板與CI和雜貨零碎。它在我的本地服務器上使用WAMP工作得很好,具有漂亮的URL和重定向。我在談論CI是我曾經工作過的最好的框架。這是非常容易使用和非常有據可查的乾杯!到CodeIgniter。

但是當我將IIS管理面板移動到IIS服務器7.XX上時,似乎我的噩夢開始了。一切都停止沒有重定向,沒有錯誤顯示沒有任何事情發生。我很害怕它爲什麼會發生。我挖Google,堆棧溢出,CI論壇差不多6個小時。我沒有收到任何東西。我很傷心:(

我不認爲我應該做的。然後,我使自己冷靜,鎮定,並開始審查一步一步的一切是在這裏:

1. Set error reporting on 
2. Check php info 
3. Check redirect/rewrite 
4. Check mysql/mysqli extension loaded or not in IIS server 
5. Converted my .htaccess file rule with web.config rule (Really helped me) 
6. Put web.config file in main directory (CI working folder) not in root folder 

How to convert .htaccess in web.config?

然後,我發現除mysqli擴展名未在IIS服務器上加載並且我的數據庫配置憑據錯誤之外,所有內容都是正確的。然後我在php.ini中進行了更改(檢查'phpinfo()'以查找php.ini IIS服務器上的路徑)line no 881 with uncomment extension = php_mysqli.dll。

這裏是我的CI配置設置:

$config['base_url'] = ''; 
$config['index_page'] = ''; 
$config['uri_protocol'] = 'REQUEST_URI'; 

之後,現在重新打開我的CI管理面板!!!!!!一切哇!哇!!像魅力一樣工作:)他他他...。 我很高興:) :)

這裏是我的web.config文件

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Imported Rule 1"> 
        <match url="(.*)" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{HTTPS}" pattern="off" ignoreCase="false" /> 
        </conditions> 
        <action type="Redirect" url="https://{HTTP_HOST}{URL}" redirectType="Found" /> 
       </rule> 
       <rule name="Imported Rule 1-1" stopProcessing="true"> 
        <match url="^(.*)$" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{URL}" pattern="^system.*" ignoreCase="false" /> 
        </conditions> 
        <action type="Rewrite" url="index.php?/{R:1}" appendQueryString="false" /> 
       </rule> 
       <rule name="Imported Rule 2" stopProcessing="true"> 
        <match url="^(.*)$" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{URL}" pattern="^application.*" ignoreCase="false" /> 
        </conditions> 
        <action type="Rewrite" url="/index.php?/{R:1}" appendQueryString="false" /> 
       </rule> 
       <rule name="Imported Rule 3" stopProcessing="true"> 
        <match url="^(.*)$" ignoreCase="false" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> 
        </conditions> 
        <action type="Rewrite" url="index.php?/{R:1}" appendQueryString="false" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

這裏是我的漂亮的網址類別

https://mysite.abc.com/administrator/admin/showUsers 

administrator is my admin folder 

admin is my controller 

and showUsers in my controller method 

希望我不好的經驗將幫助別人:)

2

我已經在根中放置了以下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="{URL}" pattern="^system.*" ignoreCase="false" /> 
         </conditions> 
         <action type="Rewrite" url="/index.php?{R:1}" /> 
        </rule> 
        <rule name="Imported Rule 2" stopProcessing="true"> 
         <match url="^(.*)$" ignoreCase="false" /> 
         <conditions logicalGrouping="MatchAll"> 
          <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> 
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> 
          <add input="{R:1}" pattern="^(index\.php|images|robots\.txt|css)" ignoreCase="false" negate="true" /> 
         </conditions> 
         <action type="Rewrite" url="index.php?{R:1}" /> 
        </rule> 
       </rules> 
      </rewrite> 
     </system.webServer> 
    </configuration> 
+0

非常感謝!它對我來說非常合適。 – Rahmuna 2015-09-13 06:14:03

0
You can like this, 
<?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="IsDirectory" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" /> 
      </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration>