我有.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?
答案 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]