我看到其他人也遇到过这个问题,但在他们的情况下,是他们的正则表达式出了问题。快速访问 regexpal.com 后,我发现情况并非如此。我有一个简单的 htaccess 文件,允许我将 URL 写为“.htm”或“.html”,而不是“.php”。我最近才发现这个脚本在处理查询字符串( ?argument=value )时有问题。这是我的完整 .htaccess 代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]
当我打印请求的查询字符串时,结果总是空的,当然,检查 array_key_exists 也找不到我试图指定的 id。我很少使用 Apache,但我认为这应该很简单。
如果重要的话,这个 htaccess 是应用在相对简单的 XAMPP 设置之上的。我认为我甚至没有对 httpd.conf 文件做任何事情。我可以尝试提供人们认为可能相关的任何其他信息。
答案1
简化这一点:
RewriteRule ^(.*)\.html?\??(.*)$ $1.php?$2 [nc]
对此:
RewriteRule (.*)\.html?$ $1.php [NC,QSA]
首字母^
是不必要的,因为.*
已经匹配了任何东西。手动保存查询字符串 (a) 有问题,并且 (b) 完全没有必要,因为QSA 标志(查询字符串附加)将在内部处理所有这些。