如何在url(IIS)中隐藏PHP文件名和扩展名

时间:2016-01-25 09:15:42

标签: php iis web-config

如何在url中隐藏filename.extension,但不在.htaccess中隐藏。我使用的是IIS服务器,我需要使用web.config

使用下面的代码,我只能隐藏扩展名为.php:

<rewrite>
  <rules>
    <rule name="Redirect .php extension" stopProcessing="false">
      <match url="^(.*).php$" ignoreCase="true" />
    <conditions logicalGrouping="MatchAny">
      <add input="{URL}" pattern="(.*).php$" ignoreCase="false" />
    </conditions>
      <action type="Redirect" url="{R:1}" redirectType="Permanent" />
    </rule>
    <rule name="hide .php extension" stopProcessing="true">
      <match url="^(.*)$" ignoreCase="true" />
    <conditions>
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      <add input="{REQUEST_FILENAME}.php" matchType="IsFile" />
    </conditions>
      <action type="Rewrite" url="{R:0}.php" />
    </rule>
  </rules>
</rewrite>

1 个答案:

答案 0 :(得分:0)

首先,如果您已有.htaccess文件,则可以使用IIS管理器中的“URL重写”部分将其导入。

其次,您无法隐藏文件名和扩展名,因为filename标识了脚本。在您的示例中隐藏扩展名,您进行假设它是.php,检查是否存在具有请求名称和.php扩展名的文件,然后执行它。例如。可以http://some.site/page.php申请http://some.site/pagehttp://some.site/home.php可以申请http://some.site/home

在两种情况下都会隐藏文件名和扩展名http://some.site/,这样就无法识别哪个页面.php&#39;或者&#39; home.php&#39;应该被称为。

您可以将所有内容重定向到单个php脚本并自行分析查询字符串。以下规则将每个请求重定向到index.php

<rewrite>
    <rules>
        <rule name="front controller" stopProcessing="true">
            <match url="^(.*)$" ignoreCase="false" />
            <action type="Rewrite" url="index.php" appendQueryString="true" />
        </rule>
    </rules>
</rewrite>

您可能需要其他规则或条件来排除静态文件,目录等。