【问题标题】:Redirect to 404 if .php extension is requested in URL如果在 URL 中请求 .php 扩展名,则重定向到 404
【发布时间】:2011-07-12 18:10:38
【问题描述】:

我目前使用 mod_rewrite 使我的所有页面都可以在没有 .php 扩展名的情况下正常工作。如:

www.mywebsite.com/noextension

但是,如果他们决定像这样将 .php 扩展名添加到 url,我将如何将我的用户重定向到 404 页面?

www.mywebsite.com/noextension.php

到目前为止,我的 htaccess 看起来像这样:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([a-zA-Z0-9]+)(/)?$ $1.php
RewriteRule ^forums/([a-zA-Z0-9]+)(/)?$ forums.php?category=$1 [NC]

我已经尝试过诸如 RewriteRule \.php$ - [R=404] 之类的东西,但是,我访问的每一页都只是 404。我想我可能不得不使用 REQUEST_URI 之类的东西来完成我的要求。

你们建议我添加什么?谢谢。

【问题讨论】:

  • 你有什么 Apache 版本?

标签: php .htaccess redirect


【解决方案1】:

试试这些行(放在你已经拥有的上面):

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php - [F,L]

此规则将阻止(403 错误)直接访问任何 .php 文件(但当规则进入下一次迭代时,将通过已重写的 URL 进行路径)。

TBH 我不能 100% 确定它会工作(这取决于你的 Apache 配置)......但考虑到你有 v2.2.x 它应该(它在我的 2.2.17 上工作正常)。


更新: 对于 “它在没有 /index 的情况下将我的网站主页踢到 404” 在上述规则之前添加此行:

RewriteRule ^$ /index.php [QSA,L]

【讨论】:

  • 很棒的伙伴,但是它在没有 /index 的情况下将我的网站主页踢到了 404。
  • 我必须说你知道你的 HTACCESS。非常感谢。
  • @SineCosine 查看我的更新答案。请测试您的所有网址。当访问目录(例如http://www.example.com/somefolder/ => /somefolder/index.php)时,上述规则将不幸阻止所有索引文件(用DirectoryIndex 指令声明),因此自动插入的 index.php 将被视为通过该规则直接访问。
  • 是的,我明白了,我会简单地将这些规则放在每个有索引文件的文件夹中。效果很好 - 所有网址都可以正常工作,即使是动态一次。再次感谢。
  • 对于其他子目录中的 index.php,请尝试RewriteRule ^(.+)\/$ $1/index.php [QSA,L]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 2012-10-24
相关资源
最近更新 更多