如何将 SCRIPT_URI 写入 Apache 的标头?

2024-01-04

我有一个设置,其中有这样的服务器:

负载均衡器 -> Apache -> Tomcat

我希望 Apache 将客户端使用的 url 写入标头中,这样一旦我点击 tomcat 就可以读取它。

我尝试使用 mod_rewrite 和 mod_headers 这样做,但没有运气。 如果我看http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html那么很明显我需要名为 SCRIPT_URI 的变量:

SCRIPT_URI=http://en1.engelschall.com/u/rse/

我也看了这个http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html http://www.askapache.com/htaccess/crazy-advanced-mod_rewrite-tutorial.html所以弄清楚如何编写标题并取得了一些成功,但还不够。

我在 apache 服务器上安装了 php,如果我查看 phpinfo(),我可以看到 SCRIPT_URI 在那里并且有一个合理的值。

我只是无法将其写入标题。这是我所做的简化版本:

#load modules
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
#Get the original uri used
RewriteRule .* - [E=INFO_SCRIPT_URI:%{SCRIPT_URI},NE]
RequestHeader set x-orig-uri "%{INFO_SCRIPT_URI}e"

我已经尝试了其他几个选项,并且都在 Windows、cygwin 和 ubuntu linux 上

有任何想法吗?


我自己找到了一个解决方法,尽管这不是我想要的干净简单的解决方案。 我能够获得各个部分,并可以使用它们来构建完整的 URI:

<IfModule !rewrite_module>
    LoadModule rewrite_module modules/mod_rewrite.so
</IfModule>

<IfModule !headers_module>
    LoadModule headers_module modules/mod_headers.so
</IfModule>


<IfModule rewrite_module>
<IfModule headers_module>

####### INITIAL SETUP #########################
    RewriteEngine on

####### SET HEADERS #########################
    #get and set the host name
        RewriteRule .* - [E=INFO_HTTP_HOST:%{HTTP_HOST},NE]
        RequestHeader set x-orig-host "%{INFO_HTTP_HOST}e"


    #get and set the host port
        RewriteRule .* - [E=INFO_SERVER_PORT:%{SERVER_PORT},NE]
        RequestHeader set x-orig-port "%{INFO_SERVER_PORT}e"


    #If the uri starts with a slash and some alphanumerics, then make a 
    #group of that until the first non-alpha (ie. the next slash)
        RewriteCond %{REQUEST_URI} ^(/[\w-]+)
    #Save the content of the regex match group ( %1 ) in an environment variable
        RewriteRule .* - [E=INFO_REQUEST_CONTEXT:%1,NE]
    #Set a header with the content of the environment variable
        RequestHeader set x-orig-context "%{INFO_REQUEST_CONTEXT}e"


    #If the accept-header contains a number after ;version= then make a regex group of that number
        RewriteCond %{HTTP_ACCEPT} \+json;version=(\d+)$ 
    #Save the content of the regex match group ( %1 ) in an environment variable
        RewriteRule .* - [E=INFO_ACCEPT_VERSION:%1,NE]
    #Set a header with the content of the environment variable
        RequestHeader set x-orig-accept-version "%{INFO_ACCEPT_VERSION}e"


    #If the accept-header contains kasia2. followed by some letters, 
    #then make a regex group of those letters
        RewriteCond %{HTTP_ACCEPT} kasia2.(\w+).*
    #Save the content of the regex match group ( %1 ) in an environment variable
        RewriteRule .* - [E=INFO_ACCEPT_NAME:%1,NE]
    #Set a header with the content of the environment variable
        RequestHeader set x-orig-accept-name "%{INFO_ACCEPT_NAME}e"


    #If https is on ...
        RewriteCond %{HTTPS} on
    #...then set the protocol environment variable to "https"
        RewriteRule .* - [E=INFO_PROTOCOL:https,NE]
    #If https is off ...
        RewriteCond %{HTTPS} off
    #...then we assume it must be "http"
        RewriteRule .* - [E=INFO_PROTOCOL:http,NE]
    #Finally, set the protocol header
        RequestHeader set x-orig-protocol "%{INFO_PROTOCOL}e"


    #Get the request uri and set an environment variable
        RewriteRule .* - [E=INFO_REQUEST_URI:%{REQUEST_URI},NE]
    #Build the whole original url out of the available parts. SCRIPT_URI is always null, otherwise we could have used that.
        RequestHeader set x-orig-url "%{INFO_PROTOCOL}e://%{INFO_HTTP_HOST}e%{INFO_REQUEST_URI}e"
    #In addition make an url with only the host and context, for convenience
        RequestHeader set x-orig-url-base "%{INFO_PROTOCOL}e://%{INFO_HTTP_HOST}e%{INFO_REQUEST_CONTEXT}e"

</IfModule>
</IfModule>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 SCRIPT_URI 写入 Apache 的标头? 的相关文章

  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • Django populate() 不可重入

    当我尝试在生产环境中加载 Django 应用程序时 我不断收到此消息 我尝试了所有的 stackoverflow 答案 但没有任何解决办法 任何其他想法 我使用的是 Django 1 5 2 和 Apache Traceback most
  • 如何使用 .htaccess 为多个参数创建干净的 url

    这是我的 htaccess 代码 用于重写干净的 url Options FollowSymLinks MultiViews Turn mod rewrite on RewriteEngine On RewriteBase RewriteC
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • Apache mod_wsgi django启用多线程多进程

    问题 我如何知道我的 apache 服务器是否已经在多进程和多线程模式下运行 因为当我对其进行负载测试时 它在不同的线程数下给出了相同的结果时间 我用 25 个线程和 50 个线程运行测试 我需要在 Django 代码中为多线程 多进程工作
  • 想要重定向除我之外的所有访问者

    基本上我即将开始在一个网站上工作 我想要一些可以添加到我的 htaccess 文件 或其他地方 中的内容 其工作方式如下伪代码 我的 ip 将代替 127 0 0 1 if visitors ip lt gt 127 0 0 1 redir
  • Apache HTTP localhost 在 macOS Monterey 上随机花费 5 秒,但在 HTTPS 上速度很快

    我尽可能地等待 但最终不得不从莫哈韦升级 我知道有些东西会不必要地损坏 当然确实如此 较大的文件 超过 100k 随机需要 5 秒才能加载 它并不总是相同的文件 也不是每次都相同 并且它只发生在 HTTP Apache 中 尝试过端口 80
  • 在 solr 的类路径中找不到资源“solrconfig.xml”

    problem 我无法访问 solr 管理页面 当我在本地系统上运行 url 时 response
  • python 3.8 Flask apache 2.4 wsgi 多重处理运行时错误:子解释器不支持 fork

    我正在尝试在 Ubuntu 20 04 中使用 python 3 8 flask wsgi 并使用多处理来运行代码 我写了一段代码 在 python 中运行得很好 这是代码 from flask import Flask from mult
  • htaccess 中的重写规则以匹配某些文件扩展名

    如何查找某些文件扩展名的实例 例如 jpg png css js php 如果没有匹配项 则将其发送到 index php route 1 我希望能够允许自定义用户名使用句点 所以 重写http example com my name ht
  • 在 Ubuntu 12.04 上的 Apache 上配置 SVN 服务器

    我正在尝试通过 HTTP 访问现有的 Subversion 服务器 我的dav svn conf文件看起来像
  • 我怎样才能发现并生存被“Slashdotted”?

    在异常高的流量高峰中生存的好方法是什么 我的想法是 在某些触发点上 我的网站应该暂时切换到 低带宽 模式 切换到基本 HTML 页面 最少的图形 禁用可能会给数据库带来不必要负载的小部件 等等 我的想法是 监控CPU使用率 监控带宽 监控请
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • Python - 定义常量列表或字典的最佳/最简洁的方法

    第一次使用堆栈溢出 我很高兴来到这里 简介 我最近开始了 Python 编程世界的神奇冒险 我喜欢它 现在 在我从 C 语言的尴尬过渡中 一切都进展顺利 但我在创建与标头文件 h 同义的内容时遇到了麻烦 问题 我有中等大小的字典和列表 大约
  • Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

    我试图通过发布请求将文件发送到我的服务器 但是当它发送时会导致错误 Access Control Allow Headers 不允许请求标头字段 Content Type 所以我用谷歌搜索了错误并添加了标题 http post rootSc
  • 为什么index.html优先于index.php?

    我在服务器上有一个网站 主页是 example com index php 好的 我将一个名为 index html 的文件上传到服务器 根目录 当我在浏览器的 URL 栏中输入站点的域时 我感到惊讶 因为 index html 页面已加载
  • 使用 Apache 在本地网络上托管网站

    我目前在我的机器上使用 Apache 在本地测试 PHP 网站 我只是想知道如何允许连接到本地网络的计算机访问本地计算机上托管的网站 如果仅通过 IP 本地网络上的计算机应该能够访问您的计算机 假设您没有防火墙阻止端口 80 HTTP 完成
  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • Apache 从子域重写为 www 但保留所有永久链接

    我已经研究了大约 2 个小时 虽然大多数主题都很相似 但没有一个解释如何做我想做的事情 我正在将一个结构为 blog domain com 的博客移至 www domain com blog 当我重定向时 我需要保留博客文章的永久链接 所以
  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2

随机推荐

  • iOS 使用 swift 创建通用 Alamofire 请求

    最近我开始学习使用 swift 开发 iOS 应用程序 所以我对它很陌生 我想在 swift 中实现rest api 调用并发现我们可以使用URLRequest 所以我写了generic method调用所有类型 例如get put pos
  • 如何在滑动嵌套recyclerview的cardview时禁用swiperefreshlayout

    当我在 swiperefreshlayout 中稍微向下滑动卡时 它认为我正在尝试刷新 我该如何避免这种情况 如果你有一个嵌套的RecyclerView 例如 命名为recyclerView您可以致电 recyclerView setNes
  • 在tomcat 8.5服务器上安装Godaddy ssl证书

    我正在尝试在我的网站上安装 SSL 证书 我正在使用Godaddy ssl 证书为了这 我已生成 csr 请求证书并将证书上传到我的服务器上 我正在使用 KEYTOOL 来使用所有这些 我从 godaddy 下载了 zip 文件中的三个文件
  • 如何在 g:select 中将 i18n 与 Grails/Groovy 枚举一起使用?

    我正在尝试在 Grails Groovy 枚举上进行 i18n 本地化 public enum Notification GENERIC 0 CONFIRM RESERVATION 100 CONFIRM ORDER 200 CONFIRM
  • 背景颜色属性向上滑动

    问题出在transitionBackground函数中 在这种情况下 当按下页面上的向上按钮时 该函数就会触发
  • 检查 MATLAB 是否以多线程模式运行

    The 文档状态 http www mathworks com help techdoc ref matlabwindows htmlMATLAB 可以以单线程模式启动 如下所示 matlab singleCompThread 我的问题是
  • #User 的未定义局部变量或方法“confirmed_at”

    我正在使用 Rails 3 可能有重复的here https stackoverflow com questions 7857070 rspec user test gives undefined local variable or met
  • 在 couchdb 中搜索或通过弹性搜索进行 River 搜索

    我知道我们在 couchdb 上创建视图 然后我们可以搜索 另一个有趣的方法是通过 River 将 couchdb 与 Elasticsearch 连接起来 并在 Elasticsearch 中进行搜索 我有两个问题 就磁盘空间使用而言 e
  • 在Java中,对象变量是否包含对象的地址?

    我和老师谈话时 她提到对象变量 她指的是对象的实例 不包含对象本身 而是包含内存中的地址 我听说在 Java 中 对象的实例实际上包含对内存中对象的引用 我错了吗 引用与包含内存中的地址还是其他东西相同吗 对象变量isn t与对象的实例相同
  • c# - 从属性构造函数抛出异常

    I found 本文 http lostechies com jimmybogard 2008 11 23 beware exceptions in attribute constructors 关于这个主题并尝试了以下方法 public
  • 从相机捕获图像并将其直接发送到服务器

    我正在尝试编写一个小代码 允许我从相机拍摄照片后直接发送照片 我的意思是当我从相机拍照时 这张照片将直接发送到服务器 而无需存储在我的手机或SD卡 所以我编写了这段代码 但我不知道它是否正确 因为实际上它显示了很多消息错误 但我不知道问题出
  • 如何使用检索到的分层结果集创建对象?

    我使用的是C 语言 我的问题是我不知道如何将检索到的分层结果集存储到我的对象中 这是我的对象 public class CategoryItem public string Name get set public int CategoryI
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 在 VSCode 中更改 Git 帐户

    同步我的更改时 VSCode 第一次尝试连接时 我不小心输入了旧 github 帐户的凭据 凭据适用于旧帐户 但我想使用新帐户 现在我找不到更改帐户的方法 已尝试卸载 安装 但 VSCode 一直记住我的登录信息 有什么想法如何刷新给定帐户
  • 如何获取 R 中具有公共 S4 超类的类列表

    在 R 中 如何获取 S4 超类的子类列表 我发现 showClass mySuperClass complete FALSE 但它只打印结果 我想将它存储在向量中以使用它 发现类定义的类 类定义本身就是一个 S4 类 cls getCla
  • 为什么当我点击 vue 组件上的另一个选项卡时滑块不起作用?

    我的看法是这样的 foreach leagues as league a league gt name a endforeach div class tab pane active div
  • 由另一个线程建立的独占访问 Java smartcardio

    All 我很欣赏这个网站上的许多有用的答案 但我发现有必要发布我的第一个问题 如果您发现我的帖子中有任何需要改进的地方 请告诉我 我有一个中等大小的带有 GUI 的 Java 程序 它充当 中间人 和控制器 在信息流的一端 它通过 HTTP
  • 如何使用 Rundeck API 将文件传递到 Rundeck 作业?

    我有一个带有文件选项的 Rundeck 作业 如何使用 Rundeck HTTP API 和curl 将文件传递到此 Rundeck 作业 我知道如何将文本传递到 Rundeck 文本选项 但我不知道如何将文件传递给 Rundeck 文件选
  • 为什么不必显式声明您可能会抛出一些 Java 内置异常?

    我注意到Integer parseInt 您不必用 try catch 包围它或声明该方法可能会抛出异常 尽管它 抛出 NumberFormatException 为什么我不必明确地捕捉NumberFormatException或者说我的方
  • 如何将 SCRIPT_URI 写入 Apache 的标头?

    我有一个设置 其中有这样的服务器 负载均衡器 gt Apache gt Tomcat 我希望 Apache 将客户端使用的 url 写入标头中 这样一旦我点击 tomcat 就可以读取它 我尝试使用 mod rewrite 和 mod he