如何在IIS上配置web.config以发布YII2 Advanced

时间:2018-03-26 15:17:37

标签: yii2 iis-7 web-config yii2-advanced-app

我正在安装基于YII2高级主题的应用。它在Apache上运行得非常漂亮,但是在IIS 7上安装时,漂亮的URL只是非常糟糕,我正在使用以下web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <sectionGroup name="system.webServer">
            <sectionGroup name="rewrite">
                <section name="rewriteMaps" overrideModeDefault="Allow" />
                <section name="rules" overrideModeDefault="Allow" />
            </sectionGroup>
        </sectionGroup>
    </configSections>

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Imported Rule 1" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions>
                        <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" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

但是这个不行,因为在打开特定路线时,它会尝试前往那条路线,而不是在YII2内建立正确的路线。

这个问题可以在正在抛出的错误上看到,你可以看到它试图打开物理路径\ web \ user \ login,这显然不存在。相反,它应该打开像.../index.php?r=controller/action

这样的东西

enter image description here

在apache上我会用:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

任何可以帮助我解决问题的想法。

1 个答案:

答案 0 :(得分:0)

经过几天的搜索并试图理解为什么dos不起作用。没有太多运气。

最后我找到了。

<强> FIRST:
确保在IIS7上安装了URL Rewrite。

如果您有web.config配置,并且它仍然路由到物理目录而不是路由器/行动路线,则几乎100%意味着您缺少URL Rewrite。是的,这是一个不一定安装的插件。

请继续,从URL Rewrite

下载并安装到您的国际空间站上

enter image description here

<强> SECOND:
这是实际工作的web.config。请注意,我以match url=".*"结尾,并注意到我添加了一行来处理图像和其他静态内容。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <configSections>
        <sectionGroup name="system.webServer">
            <sectionGroup name="rewrite">
                <section name="rewriteMaps" overrideModeDefault="Allow" />
                <section name="rules" overrideModeDefault="Allow" />
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Yii2 Routing that works" stopProcessing="true">
                    <match url=".*" />
                    <conditions  logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" pattern="css|js|jpg|jpeg|png|gif|ico|htm|html" negate="true" />                            
                        <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" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

最终 如果您使用的是YII2高级主题,请务必在两个Web目录中更新和配置web.config。

这个menas,你将需要它们:
C:\ webroot的**** \ WWW \后端\网络\的web.config
C:\ webroot **** \ www \ frontend \ web \ web.config

一定要更新你的main.php«或config.php on basic» 在高级版上,你需要确保你的enablePrtettyUrl配置为前端和后端:

C:\根目录**** \ WWW \后端\配置\ main.php
C:\ webroot **** \ www \ frontend \ config \ main.php

'urlManager' => [
   'enablePrettyUrl' => true,
   'showScriptName' => false,
...
]

我仍在调试并尝试解决一些小问题,如果我发现其他问题,我会更新。