我正在尝试在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
答案 0 :(得分:0)
解决这个500错误的任何想法?是web.config文件中的内容,但我对IIS不太了解。
据我所知,IIS url重写规则不包含与.htaccess中的“ RewriteBase / public”相同的设置。
IIS的rewriteBase会根据定义规则的位置自动计算-因此,如果您在站点的/ pubic文件夹(路径)下定义规则,则该规则将成为这些规则的基础。
因此,如果将特殊的web.config文件放在publc文件夹中,则无需在web.config文件的url重写中设置重写基础。