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
服务。