gpt4 book ai didi

ubuntu - 如何在 ubuntu DigitalOcean 上配置 Apache2 以正确重定向除一条路径之外的所有路径

转载 作者:行者123 更新时间:2023-12-04 18:49:33 26 4
gpt4 key购买 nike

我正在尝试在 DigitalOcean droplet 上运行的 Ubunti OS 上设置 Apache2:

  • 如果路径有这种模式:https://example.com/api ,继续请求。无需重定向。
  • 对于所有其他路径,重定向到 https://web.example.com ,
  • 在这两种情况下,都需要保留请求/发布/ header /其他参数。

  • 我目前有这个,但它不工作
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    SSLProxyEngine on
    DocumentRoot /var/www/example/public
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/api$
    RewriteRule ^(.*)$ https://web.example.com/$1 [R=301,L]
    #SSL certificate stuff here
    </VirtualHost>
    </IfModule>

    最佳答案

    RewriteCond %{REQUEST_URI} !^/api$
    RewriteRule ^(.*)$ https://web.example.com/$1 [R=301,L]

    您没有具体说明这不起作用或如何起作用。但是,这里有几个问题。
  • 301(永久)重定向不会保留初始请求中的请求方法。浏览器将对重定向的请求发出 GET 请求,因此任何 POST 数据在 POST 请求的情况下都会丢失。您需要使用 307(临时)或 308(永久)响应代码来保留请求方法。
    但请注意,浏览器会永久缓存 301(和 308)响应。因此,您需要在测试之前清除浏览器缓存(以及任何中间缓存)。
  • 由于这些指令直接在 <VirtualHost>容器(与 <Directory> block 或 .htaccess 相对)这将导致 URL 路径的开头出现双斜杠,因为 URL 路径与 RewriteRule 匹配。模式(您正在完整捕获)包括完整的根相对 URL 路径,以斜杠开头。

  • request/post/headers/other parameters need to be preserved.


    不确定您在这里的确切含义,但不一定可以通过重定向保留所有“ header ”,因为这毕竟完全由浏览器决定。
    您可以告诉浏览器的是要重定向到的新 URL(作为 Location HTTP 响应 header 的一部分)和 HTTP 状态代码,以指示浏览器应如何处理响应。
    请尝试以下操作:
    RewriteRule !^/api https://web.example.com%{REQUEST_URI} [R=307,L]
    不需要额外的 RewriteCond指令,因为这种检查(请求尚未以 /api 开始)可以在 RewriteRule 指令本身中更容易(和有效地)执行。
    默认情况下,通过重定向保留任何查询字符串。
    请注意,这目前是一个临时重定向。如果这是永久性的,那么只有在确认它可以正常工作后才更改为 308,以避免潜在的缓存问题。
    如上所述,您需要在测试前清除浏览器缓存。

    关于ubuntu - 如何在 ubuntu DigitalOcean 上配置 Apache2 以正确重定向除一条路径之外的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64081778/

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