9

WAMP を使用してローカルで正常に動作する codeigniter アプリがあります。ただし、IIS サーバーで動作させるのに問題があります。クエリ文字列を有効にしたくないことに注意してください。

現在 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 ファイルは、サーバーの policies/ フォルダーにあります。

問題は web.config ファイルにあると思います。構成ファイルの $config['base_url'] は動的に計算され、正しいものです。構成ファイルの $config['index_page'] が空白です。この問題の原因は何だと思いますか?

ご協力ありがとうございました。

4

5 に答える 5

34

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>  
于 2011-03-23T18:21:23.413 に答える
3

わかった!

最近、CI と食料品のクラッドを使用して管理コントロール パネルを作成しました。きれいな URL とリダイレクトを使用して、ローカル サーバー上の WAMP でうまく機能していました。CI は私がこれまで取り組んできた中で最高のフレームワークであると話していました。それはとても使いやすく、非常によく文書化されています 乾杯!! コードイグナイターに。

しかし、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 the main directory (CI working folder) not in the root folder

web.config で .htaccess を変換するには?

次に、「mysqli」拡張機能が IIS サーバーにロードされておらず、データベース構成の資格情報が間違っていたことを除いて、すべてが正しいことがわかりました。次に、php.ini に変更を加えました (「phpinfo()」をチェックして、IIS サーバー上の php.ini パスを見つけます) 881 行目で、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>

ここに私のきれいなURLタイプがあります

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

the administrator is my  admin folder

admin is my controller

and showUsers in my controller method

私の悪い経験が誰かを助けることを願っています:)

于 2013-03-05T15:53:04.723 に答える
3

Rewrite がインストールされていないことがわかりました。これはトリックをしました:

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

ブラウザのエラー画面からはインストールされていないと判断できなかったため、codeigniter のエラー ページがエラーを多少隠していた可能性があるかどうかはわかりません。また、イベント ビューア、IIS ログ、および PHP ログはすべて、この状況では役に立ちませんでした。

于 2012-09-24T22:41:38.077 に答える