【发布时间】:2016-01-06 05:22:08
【问题描述】:
我有一个使用 $_SERVER['REQUEST_URI'] 的 PHP 应用程序。如果我使用 Apache Web 服务器,我的应用程序运行良好。如果我使用 Microsoft IIS 网络服务器 App 不工作,因为 $_SERVER['REQUEST_URI'] 为空。我发现 $_SERVER['REDIRECT_URL'] 可用于 Microsoft IIS。
我的问题是如何使用 $_SERVER['REDIRECT_URL'] 而不是 $_SERVER['REQUEST_URI'] 来使用 Microsoft IIS Web 服务器获得相同的功能?
我不能简单地将 REQUEST_URI 替换为 REDIRECT_URL,因为它不包含查询字符串,我的 PHP 应用程序需要它。
我的php代码:
function filterAppUrl($url)
{
$url = htmlspecialchars($url);
$url = str_replace('"', '', $url);
$url = str_replace("'", '', $url);
return $url;
}
function setAppURL()
{
$url = $this->filterAppUrl($_SERVER['REDIRECT_URL']);
$url = substr($url, 1, strlen($url));
$this->full_url = $url;
$this->url = explode('/', $url);
}
我的 .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
我的 IIS 的 Web.config
<?xml version="1.0"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<remove value="index.php" />
<add value="index.php" />
</files>
</defaultDocument>
<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" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
【问题讨论】:
标签: php redirect iis iis-7.5 php-5.3