如何在 IIS 上正确配置 web.config 以发布 YII2 Advanced
How to propper configure web.config on IIS to publish YII2 Advanced
我正在安装基于 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
的内容
在 apache 上我会使用:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
任何可以帮助我解决这个问题的想法。
经过几天的搜索并试图理解为什么 dos 不起作用。运气不太好。
终于找到了
第一个:
确保你已经在 IIS7 上安装了 URL Rewrite。
如果你有 web.config 配置,它仍然路由到物理目录而不是 controller/action 路由,它 almost 100% 意味着你是缺少 URL Rewrite
。是的,这是一个不一定安装的插件。
所以继续吧,从 URL Rewrite
下载并安装到您的 ISS
第二个:
这是实际工作的 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。
这个菜单,你需要戴上它们:
C:\webroot****\www\backend\web\web.config
C:\webroot****\www\frontend\web\web.config
并确保更新您的 main.php «或 config.php 基本»
在高级上,您需要确保为前端和后端配置了 enablePrtettyUrl:
C:\webroot****\www\backend\config\main.php
C:\webroot****\www\frontend\config\main.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
...
]
我还在调试和尝试解决一些小问题,os如果我发现其他问题,我会更新。
我正在安装基于 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
在 apache 上我会使用:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
任何可以帮助我解决这个问题的想法。
经过几天的搜索并试图理解为什么 dos 不起作用。运气不太好。
终于找到了
第一个:
确保你已经在 IIS7 上安装了 URL Rewrite。
如果你有 web.config 配置,它仍然路由到物理目录而不是 controller/action 路由,它 almost 100% 意味着你是缺少 URL Rewrite
。是的,这是一个不一定安装的插件。
所以继续吧,从 URL Rewrite
下载并安装到您的 ISS第二个:
这是实际工作的 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。
这个菜单,你需要戴上它们:
C:\webroot****\www\backend\web\web.config
C:\webroot****\www\frontend\web\web.config
并确保更新您的 main.php «或 config.php 基本» 在高级上,您需要确保为前端和后端配置了 enablePrtettyUrl:
C:\webroot****\www\backend\config\main.php
C:\webroot****\www\frontend\config\main.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
...
]
我还在调试和尝试解决一些小问题,os如果我发现其他问题,我会更新。