0

IISバージョン7.5でのCodeigniterアプリの展開に関連するヘルプをお願いしたいと思います。CodeigniterとIISに関連する他の投稿をここで読んでみましたが、どれも機能しません。Apacheで正常に動作するCodeIgniter1.7を使用してアプリケーションを開発しましたが、Windows7UltimateのIIS7.5では動作させることができません。

phpconfigのIISデータ

まず、phpはすでにサーバーで機能しており、それを機能させるためのすべての手順を実行しました。また、phpアプリケーションが機能してhtaccessなどのファイルを使用するために必要と思われるIIS_UrlRewriteModuleをインストールしました。(添付されているのは、サーバー内のphpinfoのJPGです)。これはローカルサーバーIIS7.5です。

その後、PHPが機能することを確認し、WebアプリケーションのフォルダーをC:\ inetpub \ wwwroot \内に配置します。これは、Apacheで使用している.htaccessです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /application/index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /application/index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ application/index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    # Submitted by: ElliotHaughin

    ErrorDocument 404 index.php
</IfModule>

そして、IISではweb.configファイルを使用する必要があることを読んだので、stackoverflowの別の投稿の例に基づいてファイルを作成しました。次のコードがあります。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="MyRule"> <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> 

しかし、「http:/ / localhost / application」にアクセスすると、次のようになります。

ウェブサイトのファイルディレクトリ

また、「http:/ /localhost/application/index.php」を入力すると、エラー500が発生します。アプリケーションのルートディレクトリにweb.configしかない場合、またはルートディレクトリに.htaccessがある場合も、同じ状況になります。他に何をすべきかわからないので、助けてください。

4

2 に答える 2

1

まず、web.configは必要ありません!次に、通常のphpコード(codeigniterなし)がIISで正常に機能しているかどうかを確認します。はいの場合は、2行のコードを追加して、CodeIgniterのphpファイルの1つを変更する必要があります。Apacheから、 CodeIgniterを使用しているWebアプリケーションディレクトリをコピーします。

  1. Webアプリケーションディレクトリのすぐ下にあるシステムディレクトリに移動します。したがって、Webアプリケーションディレクトリを開くと、すぐにシステムディレクトリが表示されます。
  2. 次に、コアディレクトリに移動し、エディタでURI.phpを開き、 _parse_request_uri()という名前の関数を見つけます。
  3. 関数の最初に、次の行を追加するだけです。

    if(!isset($_SERVER['REQUEST_URI']))
        $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];
    

したがって、上記の2行を追加すると、変更された関数は次のように表示されます。

    protected function _parse_request_uri()
    {
        if(!isset($_SERVER['REQUEST_URI']))
            $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];

        if ( ! isset($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME']))

URI.phpを保存すると、変更されたコードはIISおよびApacheを含む非IISWebサーバーで機能するはずです。(Apacheでは、変更された行は効果がありません。したがって、誤って同じコードをApacheにコピーしても心配しないでください。)

于 2015-11-14T11:05:38.397 に答える
0

さて、最後に少しテストした後、私はそれを修正しました、神に感謝します。まず、拡張機能のディレクトリが間違っていたため、php.iniで問題が発生しました。そのため、mysqlおよびmssql拡張機能を見つけようとすると、PHPログにエラーが表示されました。その後、IISマネージャーでハンドラーマッピングを変更し、PHP用に作成したモジュールマッピングを編集しました。リクエストの制限のセクションで、[リクエストがファイルにマップされている場合にのみハンドラーを呼び出す]をオンにし、その後web.configを変更しました。このような:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="MyRule"> <match url="^(.*)$" /> 
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/application/index.php?/{R:1}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
        <defaultDocument>
            <files>
                <add value="index.php" />
            </files>
        </defaultDocument>
        <security>
         <requestFiltering>
            <hiddenSegments applyToWebDAV="false">
               <add segment="application" />
               <add segment="system" />
            </hiddenSegments>
         </requestFiltering>
      </security>
    </system.webServer>
</configuration>  

だから今それは動作します:D。

于 2012-09-13T17:17:23.173 に答える