htaccess阻止访问.php并仅允许使用重写规则

htaccess阻止访问.php并仅允许使用重写规则,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我有一个文件.htaccess,具有以下重写规则: RewriteEngine On RewriteRule ^login$ login.php [L] RewriteRule ^index$ index.php [L] RewriteRule ^page/([^/]+)/?$ page.php?id=$1 [L,QSA] 可以阻止直接访问所有这些文件,但只允许使用RewriteRule进行访问 例如,如果有人呼叫:“domain.com/login”应该会看到该页面 但是如果有人调用“dom

我有一个文件.htaccess,具有以下重写规则:

RewriteEngine On
RewriteRule ^login$ login.php [L]
RewriteRule ^index$ index.php [L]
RewriteRule ^page/([^/]+)/?$ page.php?id=$1 [L,QSA]
可以阻止直接访问所有这些文件,但只允许使用RewriteRule进行访问

例如,如果有人呼叫:“domain.com/login”应该会看到该页面


但是如果有人调用“domain.com/login.php”则不应(在这种情况下,应看到403或404错误)

您可以使用另一条规则来阻止直接访问
.php
文件:

RewriteEngine On

RewriteCond %{THE_REQUEST} /.+?\.php[\s?] [NC]
RewriteRule ^ - [F]

RewriteRule ^page/([^/]+)/?$ page.php?id=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
您可以添加这一行

RewriteRule login.php$ 403.php
编辑:

很抱歉,由于内部重定向,这将无法工作

试试这个

RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule login.php$ 403.php [L]

thx,因为我必须阻止对许多页面的访问,所以可以对每个页面或所有php页面使用单个规则?使用此规则,页面“login.php”将被阻止,但页面“login”也将被阻止:(