web.config 在 IIS8.0 中不工作
web.config not working in IIS8.0
我正在将一些 PHP 应用程序迁移到 Microsoft Azure WebApp。
我知道在 Whosebug 上有很多类似的问题,但我自己想不出来。
之前我在一个子目录中有这个 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest= [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
我现在有这个 web.config 文件,我用在线工具生成它并稍微修改了它。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php?rquest={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
现在我在尝试访问该页面时没有收到 404 错误。似乎 web.config 根本不起作用。
有人可以告诉我我的文件有什么问题吗?
正则表达式有点错误。
这是我的测试项目目录:
这是我的测试 web.config
:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php?request={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
结果是访问<web_app_name>.azurewebsites.net
时,匹配第2条规则,改写为<web_app_name>.azurewebsites.net/api.php
。
并且在访问 <web_app_name>.azurewebsites.net/example
时,它匹配第一个规则并重写为 <web_app_name>.azurewebsites.net/app.php?request=example
我正在将一些 PHP 应用程序迁移到 Microsoft Azure WebApp。
我知道在 Whosebug 上有很多类似的问题,但我自己想不出来。
之前我在一个子目录中有这个 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest= [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
我现在有这个 web.config 文件,我用在线工具生成它并稍微修改了它。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php?rquest={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
现在我在尝试访问该页面时没有收到 404 错误。似乎 web.config 根本不起作用。
有人可以告诉我我的文件有什么问题吗?
正则表达式有点错误。
这是我的测试项目目录:
这是我的测试 web.config
:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="rule 1J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php?request={R:1}" appendQueryString="true" />
</rule>
<rule name="rule 2J" stopProcessing="true">
<match url="^(.*)$" ignoreCase="true" />
<action type="Rewrite" url="/api.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
结果是访问<web_app_name>.azurewebsites.net
时,匹配第2条规则,改写为<web_app_name>.azurewebsites.net/api.php
。
并且在访问 <web_app_name>.azurewebsites.net/example
时,它匹配第一个规则并重写为 <web_app_name>.azurewebsites.net/app.php?request=example