Apache mod_rewrite在移动到.htaccess时表现得很奇怪

Apache mod_rewrite在移动到.htaccess时表现得很奇怪,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我的httpd conf文件中有一条重写规则: RewriteRule (.*?)\.html $1.php?%{QUERY_STRING} [NC] 它工作得很好。但当我将它放入同一虚拟主机的.htaccess中时,它现在以$1的价格返回整个文档路径,而不是http主机。它所需要做的就是将“html”替换为“php” 我显然不明白.htaccess如何处理重写规则。您需要在规则的目标中添加一个前导斜杠: RewriteRule (.*?)\.html /$1.php?%{QUERY_STRI

我的httpd conf文件中有一条重写规则:

RewriteRule (.*?)\.html $1.php?%{QUERY_STRING} [NC]
它工作得很好。但当我将它放入同一虚拟主机的.htaccess中时,它现在以$1的价格返回整个文档路径,而不是http主机。它所需要做的就是将“html”替换为“php”


我显然不明白.htaccess如何处理重写规则。

您需要在规则的目标中添加一个前导斜杠:

RewriteRule (.*?)\.html /$1.php?%{QUERY_STRING} [NC]

此外,还可以去掉目标中的
?%{QUERY\u STRING}
位。如果没有

则查询字符串将自动追加。您需要在规则的目标中添加一个前导斜杠:

RewriteRule (.*?)\.html /$1.php?%{QUERY_STRING} [NC]

此外,还可以去掉目标中的
?%{QUERY\u STRING}
位。如果没有?

的话,查询字符串会自动追加。看着那个丑陋的东西,我的眼睛几乎要流血了

 RewriteRule ^(.*).html?(.*)$ $1\.php?$2 [NC]

看着那丑陋的东西,我的眼睛几乎要流血了

 RewriteRule ^(.*).html?(.*)$ $1\.php?$2 [NC]

如果你知道正则表达式mod_,重写几乎是有意义的。但说真的,我不太明白人们为什么要用它,只要发帖子就行了?如果你知道regex mod_rewrite几乎是有道理的。但说真的,我不太明白为什么人们会用它,只是发帖子而已?太棒了。需要前导斜杠是怎么回事?它认为它是本地目录,否则?@DanielE Apache试图猜测目标是文件系统路径还是URL路径,在.htaccess中,不带前导斜杠的目标被猜测为文件系统路径。请参阅docs:Awesome中的每服务器和每目录示例之间的区别。需要前导斜杠是怎么回事?它认为它是本地目录,否则?@DanielE Apache试图猜测目标是文件系统路径还是URL路径,在.htaccess中,不带前导斜杠的目标被猜测为文件系统路径。请参阅文档中每服务器和每目录示例之间的差异: