Несколько файлов web.config - PullRequest
0 голосов
/ 11 июля 2019

Итак, я переносю приложение из xampp в iis-7 и хочу воспроизвести поведение перезаписи URL в iis.

структура моего проекта:

-- root  
  |-- app (!-- contains my aplication code)  
  |-- public (!-- contains my front end assets) 

мое поведение urlrewrite xampp:

вызов "myhost /" => "myhost / public / index.php"
вызов "myhost / Существующий_dir_or_file / file.something" => "myhost / public / mydir / myfile.something"
вызов "myhost / not_a_file_or_dir / что-то" => "myhost / public / index.php? Url = not_a_file_or_dir / что-то"

, чтобы сделать это в xampp, я использую два файла .htaccess, один в корневом каталоге для2 первых правила и другое в общем каталоге с третьим правилом.

Мой .htaccess в корневой папке

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^$ public/ [L]
  RewriteRule (.*) public/$1 [L]
</IfModule>

.htaccess в корневой / общей папке

<IfModule mod_rewrite.c>
  Options -Multiviews
  RewriteEngine On
  RewriteBase /host/public
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule  ^(.+)$ index.php?url=$1 [QSA,L]
</IfModule>

файл web.config в корне (импортированный с 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="public/" />
                </rule>
                <rule name="Imported Rule 2" stopProcessing="true">
                    <match url="(.*)" ignoreCase="false" />
                    <action type="Rewrite" url="public/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

файл web.config в корне / публичный (импортированный с iis)

<rewrite>
  <rules>
    <rule name="Imported Rule 1" 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?url={R:1}" appendQueryString="true" />
    </rule>
  </rules>
</rewrite>

Как я проверял, если яустановите только правило root / public и попросите что-то вроде "hostname / public / pages / index", оно работает нормально и выведите меня на "hostname / public / index.php? url = pages / index "

, но если я поставлю 2 первых правила, чтобы получить желаемое полное поведение, это даст мне эту страницу 404 Not Found

...