即使我没有添加.php,我也在处理一个倾向于执行脚本的服务器 所以假设我的页面是activities.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]
答案 0 :(得分:3)
您的服务器可能已启用MultiViews(Apache内容协商);当它启用并且找不到文件时,apache将查找相同的文件,但具有任何扩展名。要禁用此功能,您可以将-MultiViews
添加到选项(如果您的主机允许)...
Options +FollowSymLinks -MultiViews
我会质疑为什么这对你来说是一个问题,如果你没有.php
没有链接到你的任何脚本那么人们将如何找到它们?如果存在指向这些其他页面的链接,那么规范URL只是一个问题。
此外,通过检查$_SERVER['REQUEST_METHOD']
...
if ($_SERVER['REQUEST_URI'] != $_SERVER['SCRIPT_NAME'] and $_SERVER['REQUEST_METHOD'] != 'POST') header('Location: '. $_SERVER['SCRIPT_NAME']);