在 Windows Server IIS 上实施 Toro 所需的 htaccess 重写

在 Windows Server IIS 上实施 Toro 所需的 htaccess 重写

我正在安装ToroPHP(PHP 路由类)在我的服务器上。然而,这恰好是我的第一个 Windows 服务器,我正在尝试学习它。

以下是所需的 ModRewrite 代码,就好像它是 Toro 的 Apache 服务器一样:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ /index.php/$1 [L]

我已经阅读了这两篇文章/问题,但我无论如何也想不出为什么它不起作用。我希望有人能详细介绍一下“Windows IIS 移植版本”的每个部分...

这是我正在尝试的,但似乎不起作用:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="toro" stopProcessing="true">
                    <match url="^(.*)$ /index.php/$1" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" pattern="{UrlEncode:{R:1}} !^(index\.php)" />
                    </conditions>
                    <action type="Rewrite" url="^(.*)$ /index.php/{UrlEncode:{R:1}}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

谢谢。

Windows 服务器 (IIS) 的 URL 重写http://www.iis.net/learn/application-frameworks/install-and-configure-php-applications-on-iis/translate-htaccess-content-to-iis-webconfig

答案1

我也使用 Toro,这个对我有用,但对根“/”不起作用。在 IIS.net 上找到了这个: http://www.iis.net/learn/extensions/url-rewrite-module/enabling-pretty-permalinks-in-wordpress

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Main Rule" stopProcessing="true">
                    <match url="^(.*)$" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

为了使根目录正常工作,您需要修改 Toro.php 文件,在第 11 行,替换以下行:

$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (isset($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : $path_info);

经过

$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : ((isset($_SERVER['ORIG_PATH_INFO']) and $_SERVER['ORIG_PATH_INFO'] !== "/index.php") ? $_SERVER['ORIG_PATH_INFO'] : $path_info);

由于某种原因,IIS 返回$_SERVER['ORIG_PATH_INFO']与相等的/index.php而不是/

相关内容