Apache mod-rewrite重定向,无需更改带有参数的URL

问题描述

以下是我的配置,它使用参数从detailsPage.html重定向到detailsPage.PHP,但是url从detailsPage.html更改为detailsPage.PHP,有人可以就此进行帮助而无需更改URL

<IfModule mod_rewrite.c> 
LogLevel alert rewrite:trace3
Options +FollowSymlinks -MultiViews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^/detailsPage.html$ http://exmaple.com/detailsPage.PHP?%{QUERY_STRING} [L,QSA,NC]

</IfModule>

解决方法

RewriteRule ^/detailsPage.html$ http://exmaple.com/detailsPage.php?%{QUERY_STRING} [L,QSA,NC]

您需要从 substitution 字符串中删除方案+主机名。通过包含绝对URL,Apache会隐式触发302外部重定向,而不是内部重写。

您还需要从 substitution 字符串和%{QUERY_STRING}上的QSA标志中删除RewriteRule,否则这将使所请求的查询字符串加倍网址。默认情况下,查询字符串是通过的,因此您无需做任何事情(除非您要合并两个不同的查询字符串)。

请尝试以下操作:

RewriteRule ^/detailsPage\.html$ /detailsPage.php [L,NC]

我还会质疑NC标志的使用吗?您是否特别需要区分大小写的匹配,因为这可能会导致重复的内容问题。

NB:尽管您的问题标记为.htaccess,但我认为这些指令必须直接在您的服务器配置或<VirtualHost>容器中?由于此操作在.htaccess中无法正常工作。