Apache mod-重写重定向而不用参数改变url
Apache mod-rewrite redirect without changing url with parameters
下面是我的配置,它使用参数从 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]
您需要从 替换 字符串中删除 方案 + 主机名。通过包含绝对 URL,Apache 将隐式触发 302 外部重定向,而不是内部重写。
您还需要删除 %{QUERY_STRING}
从 替换 字符串和 RewriteRule
上的 QSA
标志,否则这将使任何请求 URL 上的查询字符串。默认情况下会传递查询字符串,因此在这方面您无需执行任何操作(除非您要合并两个不同的查询字符串)。
请尝试以下操作:
RewriteRule ^/detailsPage\.html$ /detailsPage.php [L,NC]
我还会质疑 NC
标志的使用?您是否特别需要 case-insensitive 匹配项,因为这可能会造成重复内容问题。
注意:尽管你的问题被标记为 .htaccess
,我假设这些指令必须直接在你的服务器配置或 <VirtualHost>
容器中?因为这在 .htaccess
中不起作用。
下面是我的配置,它使用参数从 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]
您需要从 替换 字符串中删除 方案 + 主机名。通过包含绝对 URL,Apache 将隐式触发 302 外部重定向,而不是内部重写。
您还需要删除 %{QUERY_STRING}
从 替换 字符串和 RewriteRule
上的 QSA
标志,否则这将使任何请求 URL 上的查询字符串。默认情况下会传递查询字符串,因此在这方面您无需执行任何操作(除非您要合并两个不同的查询字符串)。
请尝试以下操作:
RewriteRule ^/detailsPage\.html$ /detailsPage.php [L,NC]
我还会质疑 NC
标志的使用?您是否特别需要 case-insensitive 匹配项,因为这可能会造成重复内容问题。
注意:尽管你的问题被标记为 .htaccess
,我假设这些指令必须直接在你的服务器配置或 <VirtualHost>
容器中?因为这在 .htaccess
中不起作用。