我一直致力于我的.htaccess
文件,使导航体验变得更加轻松。根据Apache Foundation ?
提供的语法,只允许一次或零次写入一个字符或单词,但这似乎并非如此。由于某种原因,它允许我复制我想要的多个字符。以下是更详细的问题。
RewriteRule ^contact([/]?)$ contact.php
这条线路完美适用于我想要的东西,但我想知道为什么它允许我这样做localhost/contact////////////////////////
而不仅仅是localhost/contact
或localhost/contact/
应该。
localhost/contact////////////////////////
应该转到指定的404 HTTP ERROR
页面。
这似乎是Apache的问题,因为我已经意识到stackoverflow包含同样的问题https://stackoverflow.com/unanswered//////
答案 0 :(得分:2)
我相信这只是Apache(以及许多其他系统)解释路径的方式(参见下面的引用和链接),所以我不确定是否有答案。
此外,我尝试使用.htaccess进行了一些操作,并且2个或更多连续斜线似乎被解释为单斜杠。除非在Apache中有一个配置选项来禁用它(或者甚至可能在操作系统级别禁用此功能,这可能反过来打破其他事情),我不认为会有答案。 (如果有办法的话,很高兴得到纠正!)
以两个连续斜杠开头的路径名可能是 以实现定义的方式解释,但不仅仅是 两个前导斜杠应视为单斜杠。
来源:Pathname Resolution来自this Unix.StackExchange answer,其中包含更多有趣的链接
答案 1 :(得分:1)
您需要在RewriteEngine On
行下面添加此规则,以便将所有带有多个斜杠的网址发送到404处理程序:
RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S+) [NC]
RewriteRule ^ [L,R=404]
如果出于某种原因你想要剥离多个斜线,请使用:
RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S*) [NC]
RewriteRule ^ %1%2 [R=302,L,NE]
答案 2 :(得分:1)
我实际上今天或者昨天早些时候发布了一个答案? - 我试图解决这个问题,但是在我发布经过测试和运行的修改后的规则集之前你删除了它。所以这里是供参考:
RewriteEngine On
RewriteRule ^contact(/.*)?$ contact.php [L,NE]
此重写规则确保仅重写localhost/contact/
或localhost/contact
。但localhost/contactdasopidsai9asd9i
之类的内容只是发送了404
。
但在这个问题中,你提出了localhost/contact////////////////////////
的案例。 anubhava
已正确回答了此案;他的重写规则逻辑可以将多个斜杠发送到404
。因此,如果你将我拥有的东西与他拥有的东西结合起来,我认为你将有一个很好的解决方案来解决你的问题:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.*?)/+(/\S+) [NC]
RewriteRule ^ [L,R=404]
RewriteRule ^contact(/.*)?$ contact.php [L,NE]