我在使用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]
所述$1
在反向引用RewriteCond
的TestString(即%{DOCUMENT_ROOT}/$1.php
)是一个反向引用到捕获组中的RewriteRule
图案(即(.+)
),即。请求的URL路径。这与RewriteRule
替换(即$1.php
)中使用的反向引用相同。
多一点解释...
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php
根据您的文件结构,此处检查所请求资源和文件扩展名是否存在的条件并非严格正确。不一定要检查您最终将在下面重写的文件RewriteRule
。有关此问题的详细说明,请参见我对ServerFault问题的回答。
L
上缺少该标志RewriteRule
,因此处理将在文件中继续进行,并且可能会再次被重写。
MultiViews
需要禁用(如果尚未禁用)以便成功处理重写。目前,这可能不会影响您,但是如果您重写的内容包含URL参数,则不会;他们会丢失的。(MultiViews的作用是,file.php
在处理mod_rewrite指令之前,mod_negotation将发出内部子请求。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句