我正在将一个小PHP应用程序迁移到Microsoft Azure WebApp。
我知道stackoverflow上有很多类似的问题,但我无法自行解决。
之前我在一个子目录中有这个.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [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根本不起作用。
可以请别人告诉我我的档案有什么问题吗?
答案 0 :(得分:1)
正则表达式有一点错误。
这是我的测试项目目录:
这是我的测试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
时,它与第二条规则匹配并重写为<web_app_name>.azurewebsites.net/api.php
。
访问<web_app_name>.azurewebsites.net/example
时,它与第一条规则匹配并重写为<web_app_name>.azurewebsites.net/app.php?request=example