【问题标题】:Mod_rewrite is not working in apacheMod_rewrite 在 apache 中不起作用
【发布时间】:2016-05-28 17:43:31
【问题描述】:

我已将 apache http webserver 2.2.29 配置为代理。它的功能是将传入的请求重定向到后端服务器。下面是流程。

客户端使用 url https://iproxy.company.co.uk:8443/cis1 发送请求。 Apache 实例正在监听 iproxy.company.co.uk:8443。此请求必须发送到 url https://i.company.co.uk:8443 上的后端服务器。为此,我使用了 mod_rewrite。下面是在 httpd-alias.conf 文件中配置的。

   `Listen iproxy.company.uk:8443

    ServerName      iproxy.company.uk:8443

    DocumentRoot    /app/
    RewriteEngine On
    RewriteRule (.*)$ https://i.company.co.uk:8443$1 [R=301,L]
    ProxyPassReverse "/products/widget/" "http://product.example.com/widget/"
    RewriteLog /app/instance1/logs/rewrite.log
    RewriteLogLevel 5

    ErrorLog "/app/instance1/logs/error_log"
    TransferLog "/app/instance1//logs/access_log"

    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
    SSLCertificateFile "/app/certificates/star.cer"
    SSLCertificateKeyFile "/app/certificates/star.key"
    SSLCertificateChainFile "/app/certificates/rootCAChain.pem"
    CustomLog "/app/instance1/logs/ssl_request_log" \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
   </VirtualHost>`

我还将重写日志配置为 5 级。我在重写日志中低于。

我点击下面的命令来检查重定向是否有效

curl -k https://iproxy.company.co.uk:8443/cis1

低于输出

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <ahref="http://i.company.co.uk:8443/cis1">here</a>.</p> </body></html>

我还可以看到下面是打印在重写日志中的。

redirect to https://i.company.co.uk:8443/ci1 [REDIRECT/301]

因此我假设重定向工作正常。但是,它不是……因为服务器没有收到任何请求?我在配置中做错了什么吗?

更新: 我通过在末尾添加 [P] 更新了 RewriteRule 指令,这很有效,我的问题得到了解决。

RewriteRule (.*)$ https://sit-alfresco.rpmi.co.uk:443$1 [P]

【问题讨论】:

    标签: apache redirect mod-rewrite


    【解决方案1】:

    您将 301 响应发送回浏览器,然后浏览器将发出该请求。

    这根本不是代理!

    浏览器是否甚至可以访问 i.company.co.uk(在这种情况下,您为什么需要代理?)还是只能由服务器访问(在这种情况下,重写将不起作用)?

    如果你真的想代理它,那么你应该使用带有以下配置的 mod_proxy:

    ProxyPass / https://i.company.co.uk:8443/
    

    【讨论】:

    • ProxyPass 能否保持 uri 与传入请求相同?我希望每个请求的 uri 都不同
    • 以上配置将在iproxy.company.co.uk:8443/cis1处显示页面i.company.co.uk:8443/cis1的内容。对于任何其他页面也是如此。所以基本上它映射主机。请注意,该页面上的任何绝对引用都将保留为 i.company.co.uk(尽管也可以绕过这一点)。如果这不是您想要的,那么我认为最好澄清您的问题。
    • 它现在对我有用。非常感谢。我已经用答案更新了问题
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多