在IIS web.config中翻译.htacess

时间:2019-02-14 11:11:52

标签: php .htaccess iis web-config

我正在尝试在Windows服务器中的php中构建MVC应用。

我的应用程序正在使用.htaccess文件在Linux / Apache中运行,并且我试图创建一个web.config文件以与Windows IIS一起使用,但是我无法使其正常工作。

我的应用程序的结构是

/app
/public
.htaccess

我的基本.htaccess文件重定向到/public文件夹

# Base .htaccess 
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule ^$ public/ [L]
   RewriteRule (.*) public/$1 [L]
</IfModule>

在内部应用程序文件夹中,我有一个.htaccess文件。

# app folder Options -Indexes

在公共内部,我通过带有URL参数的 index.php 文件重定向所有内容

 # public folder
 <IfModule mod_rewrite.c>
   Options -Multiviews
   RewriteEngine On
   RewriteBase /public
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule  ^(.+)$ index.php?url=$1 [QSA,L]
 </IfModule>

我尝试通过URL重写中的导入工具来翻译.htaccess,结果返回了500 error

这就是我得到的基本规则

<rewrite>
  <rules>
     <rule name="Imported Rule 1" stopProcessing="true">
       <match url="^$" ignoreCase="false" />
       <action type="Rewrite" url="public/" />
     </rule>
     <rule name="Imported Rule 2" stopProcessing="true">
       <match url="(.*)" ignoreCase="false" />
       <action type="Rewrite" url="public/{R:1}" />
     </rule>
   </rules>
 </rewrite>

一个内部app文件夹没有给我Options -Indexes的任何结果

这是用于从公用文件夹重定向到index.php

<rewrite>
   <!--This directive was not converted because it is not supported by IIS: RewriteBase /public.-->
   <rules>
     <rule name="Imported Rule 3" stopProcessing="true">
       <match url="^(.+)$" ignoreCase="false" />
       <conditions>
         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
         <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
       </conditions>
       <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
     </rule>
   </rules>
 </rewrite>

解决这个500错误的任何想法?是web.config文件中的内容,但我对IIS不太了解。

尽管有帮助。 TIA

1 个答案:

答案 0 :(得分:0)

  

解决这个500错误的任何想法?是web.config文件中的内容,但我对IIS不太了解。

据我所知,IIS url重写规则不包含与.htaccess中的“ RewriteBase / public”相同的设置。

IIS的rewriteBase会根据定义规则的位置自动计算-因此,如果您在站点的/ pubic文件夹(路径)下定义规则,则该规则将成为这些规则的基础。

因此,如果将特殊的web.config文件放在publc文件夹中,则无需在web.config文件的url重写中设置重写基础。