【发布时间】:2015-01-18 10:45:28
【问题描述】:
这些是我的web.config 规则:
<rule name="Remove Trailing Slash">
<match url="(.*)(/|\\)$"/>
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
</conditions>
<action type="Redirect" url="{R:1}"/>
</rule>
<rule name="anything" stopProcessing="true">
<match url="^(.*?)$"/>
<conditions>
<add input="{DOCUMENT_ROOT}/{R:1}" matchType="IsFile" negate="true"/>
</conditions>
<action type="Rewrite" url="/core/handler.php?url={R:1}"/>
</rule>
这些是我的.htaccess 规则:
# remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)(/|\\)$ $1 [R]
# everything
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)$ /core/handler.php?url=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)$ /core/handler.php?url=$1&%{QUERY_STRING} [L]
他们应该表现相同,但他们没有,但我不知道我做错了什么。我正在使用 IIS 重写模块进行本地网站测试,但我托管的服务器使用 apache,因此使用了 .htaccess。
这里的重点是使用愚蠢复杂的php处理程序来完成所有操作通常由服务器完成(我会深入研究原因,但这不是这个问题的重点)。编写规则是为了重写请求的 url,以便服务器为处理程序提供服务,该处理程序提供正确的内容,同时保持相同的面。
总结一下:
web.config:
输入:http://local.com/folder_name
输出:http://local.com/folder_name
内部:http://local.com/core/handler.php?url=folder_name
.htaccess:
输入:http://server.com/folder_name
输出:http://server.com/folder_name/?url=folder_name
内部:http://server.com/core/handler.php?url=folder_name
知道出了什么问题吗?
【问题讨论】:
标签: .htaccess iis url-rewriting