我有一个在linux服务器上开发的symfony2项目,并且由于我无法控制的原因,已经将它(不幸!)迁移到了Windows服务器。除了url重写之外,这一切都正常。我尝试使用IIS URL重写模块,但在转换大多数规则时失败了(愚蠢的是我没有保存失败的列表)。
它大部分工作正常,但app.php仍然存在于所有url的开头,它不应该存在。所以网址是domain.com/app.php/correct/path,当它们应该是domain.com/correct/path
不幸的是我很少使用Windows服务器并且不擅长web.config语法,所以如果有人可以建议从Windows服务器上的所有网址的开头删除app.php缺少什么,那将非常感谢!
原始的.htaccess文件是:
DirectoryIndex app.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/app.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /app.php/
</IfModule>
</IfModule>
转换后的web.config文件目前为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url=".?" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
非常感谢!
戴夫
答案 0 :(得分:4)
使用IIS7.5在Windows服务器上设置symfony2时遇到同样的问题。 诀窍是进入你的网站管理部分。寻找&#39; url重写&#39;,寻找&#39;导入规则&#39;(在右边的某个地方)。然后在新对话框中浏览&#39; SymfonyProject / web /&#39;中的.htaccess文件。默认情况下。 IIS将为尾部斜杠规则抛出一个错误,所以删除它(如果没有它,一切似乎工作正常)并按下应用。 Viola没有app.php。
请务必将app.php添加到默认页面列表中。
我使用Symfony2附带的标准htaccess文件完成了上述操作。
在导入对话框中我有:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase / <-This line needs deleting as IIS states "This directive was not converted because it is not supported by IIS: RewriteBase "
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
所以我的web.config的开头看起来像这样:
<defaultDocument enabled="true">
<files>
<add value="app.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<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="app.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
此外,我已将我的网络目录设置为我的根目录。
希望这会有所帮助。 道格。
答案 1 :(得分:1)
我知道这是一个老问题,但今天我遇到了同样的问题,我到处搜索并花了很多时间来修复它,将web目录中的.htaccess文件替换为web.config文件,希望这个会帮助一些人。
<?xml version="1.0"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="app.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="Symfony Front Controller" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="app.php" appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>