.htaccess 当文件存在于公共html上时,apache$1失败
我有一个简单的htaccess和一个简单的重写规则.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
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页面
未映射到物理文件的基本名称