![在 Windows Server IIS 上实施 Toro 所需的 htaccess 重写](https://linux22.com/image/801909/%E5%9C%A8%20Windows%20Server%20IIS%20%E4%B8%8A%E5%AE%9E%E6%96%BD%20Toro%20%E6%89%80%E9%9C%80%E7%9A%84%20htaccess%20%E9%87%8D%E5%86%99.png)
我正在安装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
而不是/
。