我注意到在Drupal中,如果你将.php添加到任何页面的url栏,它会给你一条404消息;干净的网址已启用。页面显然是.php,但.htaccess阻止用户篡改url栏中的url扩展名。你怎么能用.htaccess做到这一点。我暂时省略了文件扩展名,但也想添加该功能。谢谢。
此外,这个问题与Drupal无关。我只提到了Drupal和示例。
答案 0 :(得分:2)
仅仅因为文件包含PHP代码,并不意味着它必须具有.php
扩展名;当您通过互联网访问文件时更是如此。
当您请求http://mysite.com/page并且您正在使用像Drupal这样的.htaccess
时,请求会转发到index.php?q=page
,因此Drupal会检查其数据库中是否有匹配page
的路径。如果找到一个,它将显示该页面的内容,如果没有,它将(正确地)给出一个404。
如果您希望使用PHP扩展程序访问所有页面,可以在.htaccess
文件中添加一条额外规则,以便从PHP文件实际不存在的任何请求中删除.php
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php $1 [NC]
请记住,这会为您网站的访问者增加零额外值(实际上他们必须记住文件扩展名以及页面的路径),并且它确切地暴露了您正在使用的服务器端技术所以潜在的攻击者会为他完成一些工作。
希望有所帮助。
答案 1 :(得分:1)
请你更深入地解释一下。如何将内容重定向到现有页面?这是常见的做法/典型的做事方式吗?
是的,它是一种非常常见的做法,被大多数框架和CMS使用。
原理很简单:你设置.htaccess
,这样每个与真实文件或目录不匹配的请求都会被重定向到前端控制器,通常是根目录中的index.php
。应用程序。该前端控制器通过分析URL并调用必要的操作来处理请求。
通过这种方式,您可以将重写规则最小化为一个,并且您可以提供自定义的404页面。
答案 2 :(得分:0)
我不知道Drupal,但在通常的php应用程序中,每个请求都被路由到前端控制器,执行一些验证并在错误时抛出404。 易于peasy