我正在使用 Zend Framework 2 在 PHP 中开发应用程序。一切都在本地工作(linux上的apache服务器)。
但现在我必须将我的站点部署到 Windows Server(在 Azure 上使用 IIS)。
由于 IIS 不读取 .htaccess 我必须在 web.config 文件上重写它。这就是我使用 IIS7 导入重写规则功能所做的。更多信息在这里。
不幸的是,ISS 无法将规则转换为网络配置。
这是我需要你帮助的地方。
这是我的 .htaccess 文件(Zend Framework 2 中的默认文件)
RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size
# fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
编辑
经过一些研究,我发现 -s 和 -l(前两个条件)可以替换为 -f。完美的!
所以我真正的问题集中在最后两条规则上。(ISS 可以转换 E=.. 和 ENV:.. 语法)