我尝试使用mod_rewrite
重写网址。这是我的.htaccess文件中的重写规则:
RewriteRule ^([a-z]+)/?$ $1\.php
如果用户输入example.com/contact
,则会加载example.com/contact.php
文件的内容。
问题是,这给我留下了重复内容,因为现在example.com/contact
和example.com/contact.php
都显示相同的信息。
如果用户尝试通过HTTP访问但允许脚本访问(我需要我的应用程序工作),我想禁止访问所有PHP文件。我怎么能用.htaccess做到这一点?
我尝试的所有内容都阻止了脚本和HTTP访问。例如,在.htaccess中使用以下内容禁止HTTP访问,但也导致我的脚本停止工作:
Deny from all
答案 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