我在使用 htaccess 隐藏网站上的 php 扩展时遇到问题。
我看到很多网站试图修复它,但没有任何结果。
但只有 html 扩展名对我来说是隐藏的。
在我的 htaccess 上,我用这个来隐藏扩展(它就在错误页面之后,这是我的 htaccess 上的第一个,但我不认为这会产生影响):
#hide extensions
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
我可以访问没有扩展名的 html 文件,但对于 php 文件,我不能(404)。
我删除了 htaccess 文件并再次创建了它,但什么也没有。
当然,在 php 和 html 文件的链接上,我不会添加扩展名(例如 url/file 而不是 url/file.php)。
假设你的.htaccess
文件位于您网站的文档根目录中,然后尝试以下操作:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule (.+) $1.html [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.+) $1.php [L]
The $1
中的反向引用RewriteCond
测试字符串 (ie. %{DOCUMENT_ROOT}/$1.php
) 是对捕获组的反向引用RewriteRule
pattern (ie. (.+)
), IE。请求的 URL 路径。这与中使用的反向引用相同RewriteRule
代换 (ie. $1.php
).
多一点解释...
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
这里的条件检查所请求的资源是否存在plus文件扩展名并不严格正确,具体取决于您的文件结构。它不一定会检查您最终将在下面重写的同一个文件RewriteRule
. See 我的答案 https://serverfault.com/a/989351/49157 to 这个服务器故障问题 https://serverfault.com/questions/989333/using-apache-rewrite-rules-in-htaccess-to-remove-html-causing-a-500-error对此进行详细解释。
The L
上缺少标志RewriteRule
,因此处理将继续通过该文件,并且可能会再次重写。
MultiViews
需要禁用(如果尚未禁用)才能成功处理重写。目前这可能不会影响您,但如果您的重写包含 URL 参数;他们将会失踪。 (MultiViews 的效果是 mod_negotation 会发出内部子请求file.php
before您的 mod_rewrite 指令已处理。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)