当URL中存在“.php”时强制404错误

时间:2015-02-22 19:19:22

标签: regex .htaccess

我有.htaccess代码隐藏 .php扩展名。它创造奇迹。

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php

我现在正试图在URL中出现.php时产生404 Not Found错误,因为我想强迫人们使用没有.php的URL。这是我现在的代码:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^$ /home.php [QSA,L]
RewriteRule ^(.+)\.php - [L,R=404]

我是.htaccess的完全新手但是每当我转到.php页面时上面的代码都会导致404错误,即使.php不在URL中。

我必须进行哪些调整才能使其仅在.php位于网址时导致404 Not Found?

1 个答案:

答案 0 :(得分:0)

重写条件仅适用于紧随规则,这意味着:

RewriteCond %{ENV:REDIRECT_STATUS} ^$

仅适用于

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

但不遵循以下规则:

RewriteRule ^(.+)\.php - [L,R=404]

最后一条规则的问题在于它会检查URI中是否包含.php,因为您正在添加.php扩展名在你的第一条规则中:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php

所以你需要添加另一个条件来防止这种情况发生:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^$ /home.php [QSA,L]
RewriteCond %{THE_REQUEST} \ /+[^\?\ ]+\.php
RewriteRule ^ - [L,R=404]