如果在URL中请求.php扩展名,则重定向到404

Sin*_*ine 3 php .htaccess redirect

我目前通过使用mod_rewrite使我的所有页面都没有.php扩展.如:

www.mywebsite.com/noextension
Run Code Online (Sandbox Code Playgroud)

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

www.mywebsite.com/noextension.php
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的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]
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情RewriteRule \.php$ - [R=404],然而,我去的每一页只有404.我想我可能不得不使用像REQUEST_URI这样的东西去做我要问的事情.

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

Laz*_*One 8

尝试这些行(放在你已经存在的行之上):

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

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

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


更新: 对于"它将我的网站主页没有/索引到404" ,在上述规则之前添加此行:

RewriteRule ^$ /index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)