.htaccess 当文件存在于公共html上时,apache$1失败

.htaccess 当文件存在于公共html上时,apache$1失败,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我有一个简单的htaccess和一个简单的重写规则 AddDefaultCharset UTF-8 # # page.php # RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^page/([^.]+)?$ page.php?slug=$1 [L,NC,QSA] 我使用这个规则显示静态页面很长一段时间 在过去的几个月里,这个简单的规则在某些服务器(cPanel和Virt

我有一个简单的htaccess和一个简单的重写规则

AddDefaultCharset UTF-8

#
# page.php
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  ^page/([^.]+)?$ page.php?slug=$1 [L,NC,QSA]
我使用这个规则显示静态页面很长一段时间

在过去的几个月里,这个简单的规则在某些服务器(cPanel和VirtualMin)中不起作用,并且不知道问题出在哪里

该规则生成匹配并执行page.php脚本,该脚本位于public_html中,但slug变量为null

我发现,如果我将page.php重命名为_page.php,它就可以正常工作

更清楚地说
如果粗体匹配,我就没有子弹了

页面/([^.]+)?$页面.php?slug=$1

如果我使用

_page/([^.]+)?$ page.php?slug=$1
page/([^.]+)?$ _page.php?slug=$1
page/([^.]+)?$ page99.php?slug=$1
一切正常

当然,我有一些规则和其他规则运行良好。只有这个规则失败了


任何帮助

看起来多视图可能是在这些服务器上启用的,在这些服务器上,多视图不起作用(即,
slug
URL参数缺失)

禁用
.htaccess
文件顶部的多视图:

Options -MultiViews
默认Apache安装中禁用了多视图,但是,由于某些原因,某些共享主机确实在服务器配置中启用了多视图

MultiView基本上支持开箱即用的无扩展URL。当启用多视图并请求
/page
(或
/page/
)时,mod_协商将查找映射到相同基本名称(即
页面
)的资源,该资源将返回适当的mime类型(即
文本/html
)。换句话说,它将查找格式为
page.php
page.html
等的文件。这发生在mod_rewrite能够处理请求之前,因此缺少URL参数(在mod_rewrite指令中),因为
RewriteRule
未得到处理(它不匹配)

我发现,如果我将
page.php
重命名为
\u page.php
,它就可以正常工作了

是,因为请求的URL
页面
未映射到物理文件的基本名称