【问题标题】:Apache mod-rewrite redirect without changing url with parametersApache mod-rewrite 重定向而不使用参数更改 url
【发布时间】:2021-01-24 06:54:54
【问题描述】:

以下是我的配置,它使用参数从 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>

【问题讨论】:

    标签: .htaccess apache2 system-administration


    【解决方案1】:
    RewriteRule ^/detailsPage.html$ http://exmaple.com/detailsPage.php?%{QUERY_STRING} [L,QSA,NC]
    

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

    您还需要从 substitution 字符串中删除 %{QUERY_STRING}RewriteRule 上的 QSA 标志,否则这将使请求 URL 上的任何查询字符串加倍。默认情况下会传递查询字符串,因此您无需在这方面做任何事情(除非您合并了两个不同的查询字符串)。

    请尝试以下方法:

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

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

    注意:尽管您的问题已标记为 .htaccess,但我认为这些指令必须直接在您的服务器配置或 &lt;VirtualHost&gt; 容器中?因为这在.htaccess 中不起作用。

    【讨论】:

    • 您的配置中是否还有其他指令(.htaccess 等)?该指令本身不会像那样“重定向”,所以也许您与其他指令有冲突?此外,请确保您没有看到缓存响应 - 清除浏览器缓存。大概您在更改服务器配置后重新启动了 Apache?你到底在哪里使用这些指令?
    • example.com/detailsPage.html?id=753300005 如果我尝试在产品的 facebook 预览中发布此 url 图片不显示如何解决此问题
    • 这与请求的发出方式无关,无论是通过 Facebook、Twitter 还是直接来自用户。如果你只是对 FB 有问题,那就是另一个问题了……OG 标签,FB 缓存?
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多