.htaccess的怪异行为

Lothereus

我是重写规则的新手,我的.htaccess遇到了一个小问题

RewriteEngine On
RewriteRule ^toto\.html$ /toto.php [NC,L]
RewriteCond %{REQUEST_URI} !^/(my|your)/template\.html [NC]
RewriteCond %{REQUEST_URI} !^/(my|your)/example\.html [NC]
RewriteRule ^([^/]*)/([^/]*)/([^\.]*)\.html$ /$1.php?type=$2&name=$3 [NC,L]
RewriteRule ^([^/]*)/([^\.]*)\.html$ /index.php?type=$1&name=$2 [L]
RedirectMatch 404 \.(htaccess|htpasswd|ini|log|sh|inc|bak|bkp|sql|json)$

我在https://htaccess.madewithlove.be/进行了测试,它始终为我提供正确的重写。

当我在虚拟主机上对其进行测试时:

我去http://mydomain.ovh/my/object.html

重写是正确的http : //mydomain.ovh/index.php? type= my & name=object

但是当我去

重写错误:在此服务器上找不到请求的URL /redirect:.php。

我不了解这种行为...

因此,我测试了新的重写规则,从而为写/填充操作创建了一个通用脚本:

RewriteEngine On
RewriteRule ^toto\.html$ /toto.php [NC,L]
RewriteCond %{REQUEST_URI} ^/extract/(my|your)/[^\.]+\.html$ [NC]
RewriteRule ^([^/]*)/([^/]*)/([^\.]*)\.html$ /extract.php?type=$2&name=$3 [L]
RewriteCond %{REQUEST_URI} !^/extract.* [NC]
RewriteCond %{REQUEST_URI} !^/(my|your)/template\.html [NC]
RewriteCond %{REQUEST_URI} !^/(my|your)/example\.html [NC]
RewriteRule ^([^/]*)/([^/]*)/([^\.]*)\.html$ /set.php?type=$2&name=$3 [NC,L]
RewriteRule ^([^/]*)/([^\.]*)\.html$ /index.php?type=$1&name=$2 [L]
RedirectMatch 404 \.(htaccess|htpasswd|ini|log|sh|inc|bak|bkp|sql|json)$

我在https://htaccess.madewithlove.be/进行了测试,它始终为我提供正确的重写。

当我在虚拟主机上对其进行测试时:

我去http://mydomain.ovh/my/object.html

重写是正确的http : //mydomain.ovh/index.php? type= my & name=object

我转到http://mydomain.ovh/fill/my/object.htmlhttp://mydomain.ovh/write/your/data.html

重写正确http : //mydomain.ovh/set.php? type=my&name = objecthttp://mydomain.ovh/set.php?type=your&name=data

但是当我转到http://mydomain.ovh/extract/my/object.htmlhttp://mydomain.ovh/extract/your/data.html时

重写总是错误的:请求到达脚本但没有查询字符串...(并且它似乎是重定向?)

["PATH_TRANSLATED"]=>
string(19) "redirect:/index.php"
["PATH_INFO"]=>
string(30) "/my/object.html"
["SCRIPT_NAME"]=>
string(11) "/extract.php"
["REQUEST_URI"]=>
string(37) "/extract/my/object.html"
["QUERY_STRING"]=>
string(0) ""
["PHP_SELF"]=>
string(41) "/extract.php/my/object.html"

有人可以帮忙这些重写规则吗?

阿努巴瓦

您需要关闭MultiViews.htaccess顶部的选项,该选项似乎已在Apache配置中为您的网站打开。

将此添加到您的.htaccess顶部:

Options -MultiViews

选项MultiViews(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation module运行前的选项 mod_rewrite使Apache服务器匹配文件扩展名。因此,如果/fileURL是URL,则Apache将提供服务/file.html

进行更改后,请在新的浏览器中进行测试以避免旧的浏览器缓存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章