htAccess 将查询字符串重写为文件夹中断 $_GET


htaccess rewrite query string to folder breaking $_GET

RewriteCond %{THE_REQUEST} ' /view'?i=([0-9]+)
RewriteRule ^ /view/%1? [L,R]
RewriteRule ^view/([0-9]+)$ /view?i=$1 [L]

这会将http://domain.com/view?i=40重写为 http://domain.com/view/40 .

问题是,它似乎正在破坏$_GET['i'](空(。这个答案是从这里开始的。是什么原因造成的?

注意:我有一个以前的重写规则,可以从URL中删除.php

尝试关闭选项MultiViews

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_METHOD} =POST
RewriteRule ^ - [L]
RewriteCond %{THE_REQUEST} ' /view'?i=([0-9]+)
RewriteRule ^ /view/%1? [L,R]
RewriteRule ^view/([0-9]+)$ /view?i=$1 [NC,L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s([^.]+)'.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]

选项 MultiViews 由在 mod_rewrite 之前运行的Apache's content negotiation module使用,并使 Apache 服务器匹配文件的扩展名。所以/file可以在 URL 中,但它会/file.php服务。