Контекст: IIS7, Win7, Joomla 1.5
С этим URL-адресом http: // сайт / foo , если у меня есть подкаталог с именем «foo» в корне установки Joomla, IIS7 пытается найти в нем index.php и возвращает 403, прежде чем Joomla начнет работу.
С этим URL-адресом http: // сайт / бар , если у меня нет подкаталога с именем «bar», IIS7 передает URL-адрес Joomla и позволяет ему позаботиться о том, существует страница или нет.
В случае http: // сайт / foo , как мне настроить IIS7 так, чтобы он игнорировал факт наличия подкаталога "foo" и передавал полный URL-адрес Joomla?
В рамках установки Joomla на IIS вы, вероятно (или, по крайней мере, должны были) создать web.config, который выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Security Rule" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{QUERY_STRING}" pattern="mosConfig_[a-zA-Z_]{1,21}(=|\%3D)" ignoreCase="false" />
<add input="{QUERY_STRING}" pattern="base64_encode.*\(.*\)" ignoreCase="false" />
<add input="{QUERY_STRING}" pattern="(\<|%3C).*script.*(\>|%3E)" />
<add input="{QUERY_STRING}" pattern="GLOBALS(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
<add input="{QUERY_STRING}" pattern="_REQUEST(=|\[|\%[0-9A-Z]{0,2})" ignoreCase="false" />
</conditions>
<action type="CustomResponse" url="index.php" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
</rule>
<rule name="SEO Rule">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
<add input="{URL}" negate="true" pattern="^/index.php" ignoreCase="false" />
<add input="{URL}" pattern="(/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Чтобы IIS не проверял существующие файлы и каталоги перед перезаписью в Joomla, вам следует удалить следующие две строки:
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" pattern="" ignoreCase="false" />
Лучший ответ, который я получил на это, пришел из Переполнение стека