Windows Azure重写规则导致HTTP错误500

时间:2012-06-10 12:56:13

标签: php windows codeigniter azure

我已经在这个工作了几个小时了。我正在尝试将Codeigniter框架放入Windows Azure网站。 PHP工作得很好但是我似乎无法让这个重写规则正常工作。这是我的web.config文件。

<?xml version="1.0"?>

    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="Rule" 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" />
                <add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
              </conditions>
              <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>

当我将文件上传到Windows Azure网站并运行带有index.php的页面时,它返回HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request此时我不知道该怎么做,我是否需要做某事使用Windows Azure?我来自Apache背景,Windows IIS对我来说是新的。任何信息对我都有帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

根据您提供的信息我来自Apache背景,Windows IIS对我来说是新的,我确信您的问题与IIS配置相关,以支持URL重写。 (如果您已经安装了URLRewrite并在Azure VM中配置,请告诉我,我将删除此答案)

默认情况下,在Windows Azure中,IIS没有安装URLRewrite模块,因此无法执行任何配置的URL重写设置,并且将返回500错误。

您是否启用了对Azure VM的RDP访问权限,以便您可以远程访问并查找应用程序事件日志中记录的可能异常?如果您对Azure VM进行RDP并查找应用程序事件日志,则会看到一条错误,说明URL重写模块不可用。

首先,您需要创建一个启动任务以在Azure中安装URLRewrite模块。要了解有关Windows Azure启动任务的更多信息,请访问此link

这是关于如何在Windows Azure中启用URL重写的link。 (如果这是您的错误,我可以编写有关如何在Windows Azure上运行URLRewrite的详细信息)

答案 1 :(得分:0)

我只是将ubuntu上的Apache移动到Azure网站上的IIS。根据以下网址,重写模块似乎已经启用。我也使用Web Platform Installer在我的Windows 7上设置类似的环境(IIS express 7.5),web.config也能很好地工作。

“... URL Rewrite模块始终在云中启用并可用。但是,您需要安装它才能在本地开发环境中使用它......”

http://msdn.microsoft.com/en-us/library/windowsazure/dd573358.aspx

您的web.config似乎没问题,这与我的非常相似 - 删除了url中的index.php。

请启用错误消息以从IIS输出详细信息,以帮助您识别问题。我使用这些技巧来了解IIS如何查找我的文件。它是,和以下部分:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <system.webServer>

        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>

        <rewrite>
        <rules>
            <rule name="RuleRemoveIndex" 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/{R:1}" appendQueryString="true"/>
            </rule>
        </rules>
        </rewrite>

    </system.webServer>

    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>

</configuration>

另外,请记得检查config.php中的base_url是否正确!

希望它有所帮助!