Html 如何对.htaccess重写规则进行例外?

Html 如何对.htaccess重写规则进行例外?,html,apache,.htaccess,mod-rewrite,url-rewriting,Html,Apache,.htaccess,Mod Rewrite,Url Rewriting,我正在使用.htaccess重写,以从我的网站中删除“.html”扩展名。但是,我在函数中使用URL将参数传递给另一个页面(mysite.com/locations#12345) 我的重写规则如下: RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] RewriteRule ^ /%1 [NC,L,R] RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^ %{REQUEST_URI}.html [

我正在使用.htaccess重写,以从我的网站中删除“.html”扩展名。但是,我在函数中使用URL将参数传递给另一个页面(mysite.com/locations#12345)

我的重写规则如下:

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
我试着这样做:

RewriteCond %{THE_REQUEST} /locations/([^.]+) [NC]
RewriteRule ^ /locations%1 [NC,L,R]

但是我得到了“mysite.com/locations%20HTTP/2#12345”

你需要关闭
目录斜杠
来关闭目录的尾随斜杠,并且关闭
索引
来避免列出目录内容

directorysash Off
选项+后续符号链接-多视图-索引
重新启动发动机
RewriteCond%{THE_REQUEST}\s/+([^.]+)\.html[?\s][NC]
重写规则^/%1[L,R=302]
重写cond%{DOCUMENT_ROOT}/$1.html-f
重写规则^(+?)/?$$1.html[L]

请确保在清除浏览器缓存后对其进行测试。

您的原始URL是什么,应该重定向的URL是什么?我请求的是“mysite.com/locations#12345”,但我使用的重写规则是重写它。如果我删除覆盖的尝试,我当前的规则将该URL设为“mysite.com/locations/#12345”-/”不能在那里,因为它会将我带到位置/目录而不是页面。您最初的规则只是从URL中删除
.html
,但您在
mysite.com/locations\12345
中没有
.html
,即使我请求“mysite.com/locations.html”它也会被重写“mysite.com/locations/#12345-带或不带“.html”的请求会在前两个条件下产生相同的重写。如果
locations
是真实目录,则
mod#dir
会自动添加一个尾随斜杠。你有一个名为
locations.html
的文件和一个名为
locations/
的目录吗?看起来不错!有一件事。。。我的站点上的光标不再在链接上变为“指针”,光标仍然是默认的。这是一个关于可用性的问题。知道为什么吗?抱歉,这和服务器端无关,可能是一些css样式问题,我不知道是什么导致了它,因为我并没有做css更改。大约5分钟后,光标问题消失了。奇怪!我将把你的答案记为已被接受的答案。非常感谢。