1

ルートフォルダーにある次の web.config 設定を使用して、CakePHP の IIS で動作するように書き換えルールを取得しようとしています。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
            <rule name="Imported Rule 1" stopProcessing="true">
              <match url="^$" ignoreCase="false" />
              <action type="Rewrite" url="app/webroot/" />
            </rule>
            <rule name="Imported Rule 2" stopProcessing="true">
              <match url="(.*)" ignoreCase="false" />
              <action type="Rewrite" url="app/webroot/{R:1}" />
            </rule>
            <rule name="Imported Rule 3" stopProcessing="true">
              <match url="^$" ignoreCase="false" />
              <action type="Rewrite" url="webroot/" />
            </rule>
            <rule name="Imported Rule 4" stopProcessing="true">
              <match url="(.*)" ignoreCase="false" />
              <action type="Rewrite" url="webroot/{R:1}" />
            </rule>
            <rule name="Imported Rule 5" stopProcessing="true">
              <match url="^(.*)$" ignoreCase="false" />
              <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
              </conditions>
              <action type="Rewrite" url="index.php" appendQueryString="true" />
            </rule>
          </rules>
        </rewrite>
    </system.webServer>
</configuration>

すべての CSS、JS、およびその他のファイルは正常に機能します。ホームページでの読み込みと同様ですが/pages/about、404!

編集: IIS でのセットアップのスクリーンショット:

ここに画像の説明を入力

どうしたの?ありがとう

4

2 に答える 2

3

私はIISの経験があまりありませんが、この質問に戻ると、いくつかの明白な問題に気づいています。IISは、CakePHPの.htaccessの3つすべてを、それらがどのディレクトリに含まれているかに関係なくインポートしました。

CakePHPには2つの追加の.htaccessファイルが付属しているため、ユーザーはインストールをApacheに簡単にスローでき、URLに関係なく、常に正しい.htaccessファイルにリダイレクトされ、「正常に機能する」(TM)必要があります。 )::

Document root     Additional .htaccess file     Correct .htaccess file
/ --------------> /.htaccess -----------------> /app/webroot/.htaccess
/app/ ----------> /app/.htaccess -------------> /app/webroot/.htaccess
/app/webroot ---------------------------------> /app/webroot/.htaccess

ドキュメントルートがに設定されていると仮定すると、IISがこれらのファイルをインポートする方法では/、ルール3〜4(2番目の.htaccessファイルから)は必要ありません。ただし、さらに重要なのは、ルール2のキャッチオール正規表現(.*)(最初の.htaccessファイルから)により、ルール2を超えるルールが実行されないことです。つまり、リクエストがindex.phpに渡されることはありません。

とにかく、あなたはApacheを使っていないので、CakePHPのインストールを無計画に投げて、それらが正しく機能することを期待することはできません。Webサーバー(Apache、IIS、Nginxなど)の実稼働環境(パフォーマンスとセキュリティ)で使用する正しいドキュメントルートは、適切な名前の/app/webrootディレクトリです。このディレクトリには、index.php、静的ファイル、および正しい.htaccessファイルが含まれています。

その後、必要なのはルール5(正しい.htaccessファイルから)だけです。基本的には次のようになります。「提供できる実際のファイルまたはディレクトリがない限り、すべてのリクエストを照合してindex.phpに送信します」:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
            <rule name="CakePHP" stopProcessing="true">
              <match url="^(.*)$" ignoreCase="false" />
              <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
              </conditions>
              <action type="Rewrite" url="index.php" appendQueryString="true" />
            </rule>
          </rules>
        </rewrite>
    </system.webServer>
</configuration>
于 2012-10-03T19:32:08.250 に答える