如何禁止HTTP访问PHP文件?

时间:2015-05-14 22:03:33

标签: apache .htaccess mod-rewrite

我尝试使用mod_rewrite重写网址。这是我的.htaccess文件中的重写规则:

RewriteRule ^([a-z]+)/?$ $1\.php

如果用户输入example.com/contact,则会加载example.com/contact.php文件的内容。

问题是,这给我留下了重复内容,因为现在example.com/contactexample.com/contact.php都显示相同的信息。

如果用户尝试通过HTTP访问但允许脚本访问(我需要我的应用程序工作),我想禁止访问所有PHP文件。我怎么能用.htaccess做到这一点?

我尝试的所有内容都阻止了脚本和HTTP访问。例如,在.htaccess中使用以下内容禁止HTTP访问,但也导致我的脚本停止工作:

Deny from all

1 个答案:

答案 0 :(得分:1)

您可以使用THE_REQUEST

您的代码现在应该是这样的

Options -MultiViews
RewriteEngine On

# if file exists and has ".php" extension then redirect to extensionless equivalent
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} \s/([^/]+)\.php(?:\s|\?) [NC]
RewriteRule ^ /%1? [R=301,L]

# if uri + ".php" exists then internally rewrite to "uri.php"
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^([^/]+)$ /$1.php [L]
  • http://example.com/contact.php会重定向到http://example.com/contact
  • http://example.com/contact将在内部重写为/contact.php