gpt4 book ai didi

apache - 将.php重定向到.html,在.htaccess中内部将.html重写为.php

转载 作者:行者123 更新时间:2023-12-02 02:39:22 24 4
gpt4 key购买 nike

我正在重建我的私有(private)博客。我现在想使用带有 PHP 的主机。但是,我想隐藏 .php 扩展名并使用 .html 代替。另一方面,托管商需要重写 .php 才能实际运行脚本。所以我想:

  1. 将对 .php 的任何请求外部重定向到相应的 .html URL,这样用户就不会“看到”PHP URL。

  2. 在内部将对 .html 文件的任何请求重写为 .php 文件名,以执行实际的 PHP 脚本。

据我所知,主机使用 Apache 和 mod_rewrite。

基本上我认为我需要的是:

RedirectEngine On
RedirectMatch 301 ^(.*).php$ $1.html
RewriteRule ^(.*).html$ $1.php [L]

但是,我得到了指向 .html 文件的无限重定向循环。就好像 RewriteRule 自动再次触发 RedirectMatch 一样。我还尝试了 RewriteRuleRewriteCondRewriteBase 的各种组合,而不是 RedirectMatch,但重定向通常会发生到某些主机内部目录结构(例如 /bla/foo/user/xyz/.../file.html),并且 RedirectBase 显示没有效果。

感谢任何帮助!

最佳答案

对于这样的事情,你只需要使用 mod_rewrite。 RedirectMatch 是一个 mod_alias 指令,因此可能会导致冲突(不同的模块在不同的时间运行,尽管配置文件中有明显的顺序)。无论如何,您仍然需要小心重定向/重写循环。

# 1. Externally redirect `.php` requests to `.html`
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ /$1.html [R=302,L]

检查 REDIRECT_STATUS 环境变量的 RewriteCond 指令可防止重写 URL 被重定向(这将导致重定向循环) 。第一次重写后,REDIRECT_STATUS 设置为“200”(200 OK HTTP 状态)(如下)。

当您确定 302(临时)重定向正常工作时,将其更改为 301。 301 被浏览器硬缓存,因此可能会给测试带来问题。

然后,执行内部操作,就像以前一样(记住转义点以匹配文字点):

# 2. Internally rewrite `.html` to `.php`
RewriteRule ^(.+)\.html$ $1.php [L]

As if the RewriteRule automatically triggers the RedirectMatch again.

是的,这确实发生了(上面的 RewriteCond 指令的原因)。当 URL 被重写/更改时,整个过程将重复,直到 URL 不变地通过。

but the redirect then usually goes to some hoster-internal directory structure

当您尝试重定向到每个目录(即.htaccess)上下文中的相对路径时,就会发生这种情况。目录前缀(内部目录文件系统路径)被添加到重写的 URL 上。对于外部重定向,您需要指定绝对或根相对 URL。

and RedirectBase shows no effect.

嗯,RewriteBase 指令可以解决上述重定向到相对路径的问题。 RewriteBase 指令有效地更改了添加回相对路径替换的目录前缀。这就是它的全部作用。如果您不使用相对路径替换,则它不会产生任何效果。

关于apache - 将.php重定向到.html,在.htaccess中内部将.html重写为.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41399186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com