1

我正在使用即使我不添加 .php 也倾向于执行脚本的服务器所以假设我的页面是活动.php 然后我可以执行我的脚本:

www.example.com/activities.php
www.example.com/activities
and even www.example.com/activities/

我试图绕过类似的问题:

if ($_SERVER['REQUEST_URI'] != $_SERVER['SCRIPT_NAME'])  header('Location: '. $_SERVER['SCRIPT_NAME']);

效果很好,直到我需要发布一些数据。我的 htaccess 文件中没有任何内容可以解释这种行为(没有 mod_rewrite 的东西或任何东西)。我怎样才能关闭它?

服务器信息:

Linux Linux1 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 
Apache Version  Apache/2.2.22 (Ubuntu)
Apache API Version  20051115 

提前致谢

编辑:.htaccess 文件

php_flag display_errors on
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_Host} ^domain.be [NC]
RewriteRule ^(.*)$ http://www.domain.be/$1 [L,R=301]
4

1 回答 1

3

您的服务器可能启用了MultiViews(Apache 内容协商);当它被启用并且找不到文件时,apache 将查找相同的文件但具有任何扩展名。要禁用此功能,您可以添加-MultiViews到选项(如果您的主机允许)...

Options +FollowSymLinks -MultiViews

我会质疑为什么这对你来说是个问题,如果你没有链接到你的任何脚本,.php那么人们将如何找到它们?只有当存在指向这些其他页面的链接时,规范 URL 才是真正的问题。

此外,您可以改进基于 php 的重定向以检查当前请求方法,而不是重定向 POST 请求,方法是检查$_SERVER['REQUEST_METHOD']...

if ($_SERVER['REQUEST_URI'] != $_SERVER['SCRIPT_NAME'] and $_SERVER['REQUEST_METHOD'] != 'POST')  header('Location: '. $_SERVER['SCRIPT_NAME']);
于 2013-04-19T18:50:38.367 回答