带有查询字符串的 RewriteRule 被重写为 /param/param/

RewriteRule with query string gets rewritten to /param/param/

我有这个重写规则:

RewriteRule ^gallery/([^/]+)/?$ /gallery.php?title= [L]

但是,当导航到 gallery/a/ 时,内部重定向是:

gallery.php/a //(instead of: gallery.php?title=a)

什么会导致这种行为?

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

使用 .htaccess 顶部的这一行将其关闭:

Options -MultiViews