Laravel .htaccess 重写规则转换为 IIS

Posted

技术标签:

【中文标题】Laravel .htaccess 重写规则转换为 IIS【英文标题】:Laravel .htaccess rewrite rule conversion to IIS 【发布时间】:2013-02-22 06:55:39 【问题描述】:

Laravel4 框架带有一个默认的 .htaccess 规则来创建漂亮的 url。

规则是这样的。

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %REQUEST_FILENAME !-f
    RewriteRule ^ index.php [L]
</IfModule>

问题: IIS 中的等价物是什么?

【问题讨论】:

【参考方案1】:

您可以使用import Apache rules feature 将 Apache 规则转换为 IIS。

在你的情况下,它将是:

或在web.config 文件中:

<rule name="Imported Rule 1" stopProcessing="true">
    <match url="^" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll">
        <add input="REQUEST_FILENAME" matchType="IsFile" ignoreCase="false" negate="true" />
    </conditions>
    <action type="Rewrite" url="index.php" />
</rule>

【讨论】:

@jcadiz 如何添加此代码以及在公共或 htacess 中的位置。请帮忙【参考方案2】:

感谢 Oli Folkerd,这对我有用:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Laravel4" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="REQUEST_FILENAME" matchType="IsDirectory" negate="true" />
                        <add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

【讨论】:

【参考方案3】:

有几个额外的部分值得放在您的 web.config 文件中

下面的代码允许您使用附加的 PUT 和 DELETE HTTP 动词创建 restfull 控制器,并允许在远程调试服务器时显示 laravel 的自定义错误页面:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Laravel4" stopProcessing="true">
                    <match url="^" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="REQUEST_FILENAME" matchType="IsDirectory" negate="true" />
                        <add input="REQUEST_FILENAME" matchType="IsFile" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
        <handlers>
            <remove name="PHP53_via_FastCGI" />
            <add name="PHP53_via_FastCGI" path="*.php" verb="GET,HEAD,POST,PUT,DELETE" modules="FastCgiModule" scriptProcessor="C:\Program Files (x86)\PHP\v5.3\php-cgi.exe" resourceType="Either" requireAccess="Script" />
        </handlers>
        <httpErrors errorMode="Detailed" />
    </system.webServer>
</configuration>

【讨论】:

以上是关于Laravel .htaccess 重写规则转换为 IIS的主要内容,如果未能解决你的问题,请参考以下文章

PHP/Apache:用 .htaccess 重写规则

将web.config转换为htaccess时出错

Nginx 中的多站点 WordPress 重写规则

htaccess 条件重写规则与 mod_GeoIP

除了我在 htaccess 中的第一条规则之外,我如何重写所有内容?

.htaccess 重写规则破坏 css