如何在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>
答案 0 :(得分:0)
首先,如果您已有.htaccess
文件,则可以使用IIS管理器中的“URL重写”部分将其导入。
其次,您无法隐藏文件名和扩展名,因为filename标识了脚本。在您的示例中隐藏扩展名,您进行假设它是.php
,检查是否存在具有请求名称和.php
扩展名的文件,然后执行它。例如。可以http://some.site/page.php申请http://some.site/page,http://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>
您可能需要其他规则或条件来排除静态文件,目录等。