【问题标题】:use Apache Alias instead of RewriteRule to serve HTML page使用 Apache Alias 而不是 RewriteRule 来提供 HTML 页面
【发布时间】:2020-09-26 03:15:20
【问题描述】:

Apache 配置中的一个简单别名不起作用 -

Alias /url/path/some-deleted-page.html /url/path-modified/new-avatar-of-some-deleted-page.html 

它给出“找不到页面”。 但是 RewriteRule 按预期工作,但它将重定向状态发送到浏览器。我希望浏览器/用户不知道重定向。因此,我想使用 Alias 而不是 RewriteRule。我想确认 mod_alias 是否可以用于映射单个 URL。

我也使用 ProxyPassMatch,它将所有 html 页面作为 PHP 脚本执行。同样添加 ProxyPass 也没什么区别。

ProxyPass /url/path/some-deleted-page.html !

请帮忙,以便我可以使用 Alias 而不是 RewriteRule 映射单个 URL(其中一堆)。

【问题讨论】:

    标签: apache mod-rewrite mod-alias


    【解决方案1】:

    mod_alias 的目的是将请求的 URL 与运行 httpd 实例的系统上的目录进行映射。它不会向浏览器返回任何内容(即没有重定向代码,什么也没有)。这一切都是在内部完成的。因此,您的客户甚至不知道它的存在。

    请求:http://www.example.com/someurl/index.html

    配置

    [...]
    DocumentRoot "/opt/apache/htdocs"
    Alias "/someurl/" "/opt/other_path/someurl_files/"
    [...]
    

    在这种情况下,请求除/someurl/ 之外的任何 URL 的用户将收到来自/opt/apache/htdocs 的文件。

    如果用户请求/someurl/,则将使用来自/opt/other_path/someurl_files/ 的文件。

    此示例中仍然缺少用于保护Alias 目录的<Directory> 定义。

    您应该阅读:https://httpd.apache.org/docs/2.4/mod/mod_alias.html


    Alias 将涵盖您需要将某个 URL 指向文件系统上的特定目录的情况。

    如果您需要修改文件名(即客户端要求文件 A,而您发回页面 B),则应使用 RewriteRule。要隐藏您更改文件名的事实,请使用[P] 标志。

    该指令允许您使用正则表达式,但仍使用代理机制。所以你的客户确实知道发生了什么,因为他的地址栏中的地址没有改变。

    【讨论】:

    • 感谢您的澄清。请让我知道我们如何实现它,即在不向浏览器/客户端发送任何 301、302、307 等的情况下执行类似于 mod_rewrite 的操作。我有实际的用例来使它工作。如果旧 URL 存在,Facebook Like/Share 可以保留到新 URL。我们不想为了满足 FB 爬虫而将代码与虚拟页面混为一谈。
    • 你做的正是我在这里发布的。 Alias "/the_url_you_want/" "/the_directory_where_the_files_are_on_your_system/".
    • 请告诉我如果html文件名被改变了怎么可能? “some-deleted-page.html”现在是“new-avatar-of-some-deleted-page.html”
    • mod_alias 将 URL 映射到目录。它不会处理文件名更改。为此,您需要使用 mod_rewrite。 RewriteRule[P] 标志将允许您完全控制重命名规则。并且使用[P] 标志,它将充当代理,因此客户端永远不会知道文件名与请求的页面不匹配。
    • 我用 [P] 标志解决了这个问题。由于代理与主机服务器相同,我使用http://localhost/url/path-modified/new-avatar-of-some-deleted-page.html 作为代理目的地。有效。请更新答案,以便我接受。
    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 2012-01-02
    • 2016-03-08
    • 2016-06-14
    • 2011-09-12
    • 2021-04-29
    • 2012-04-07
    • 2017-03-10
    相关资源
    最近更新 更多