如何将 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 的标头? 的相关文章

  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • Google reCAPTCHA 响应中没有 Access-Control-Allow-Origin 的 405 错误

    我正在尝试通过 google 实现 reCaptcha 但是当我调用下面提到的 api 时验证失败 在 reCaptcha admin 中我提到过本地主机在域列表中 google com recaptcha api siteverify 以
  • 将非 www 和非 http 重定向到 https

    昨天我在服务器上安装了 SSL 从那以后我无法访问某些页面 www example com amsterdam shoes example com 阿姆斯特丹 两者都不会重定向到 https 甚至不会重定向到 http www exampl
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car
  • 如果django项目位于子文件夹和子域中,如何编写.htaccess?

    我的 django 站点的路径是 staging ninjawebsite com clients project 我希望将其视为基本网址 django 项目位于public html clients project子文件夹 一切似乎都工作
  • cuda 文件组织的有效方式:.cpp .h .cu .cuh .curnel 文件

    cuda最容易理解 最高效的代码组织是什么 经过一番调查后 我发现 cuda 函数声明应位于 cuh 文件中 实现位于 cu 文件中 内核函数实现位于 curnel 文件中 其他 C 内容通常在 cpp 和 h 文件中 最近我发布了一个问题
  • 使用 ConcurrentUpdateSolrServer 需要哪些 jar?

    目前使用 solrServer new CommonsHttpSolrServer serverUrl 和这些罐子 apache solr core 3 6 0 apache solr solrj 3 6 0 commons codec 1
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • Centos 与 Plesk11.x

    我正在使用 Centos 和 Plesk 11 x 以及这篇文章如何获取 RHL 的 Apache mod jk 连接器 https stackoverflow com questions 33381933 how to obtain ap
  • 编辑/更改服务器上的 300 多项选择

    我编辑了所有服务器 http 状态消息 当我输入错误的地址时 300 个多项选择仍然显示 所以它向我显示选项 你知道我怎样才能摆脱它吗 我不希望用户有选择 我想重定向到 index html 或者我想显示自己创建的带有 gt 返回 的消息页
  • ajaxSetup(beforeSend 不起作用

    登录到远程 API 服务器并获取 access token 后 我尝试为所有后续 ajax 调用设置授权标头 done function result console log GOT AUTHORIZATION amplify store
  • 在浏览器中读取wsdl文件

    当我尝试在浏览器中打开 WSDL 文件 http localhost something file wsdl 时 我被提议下载该文件 但我希望能够在浏览器中以 XML 字符串 形式查看 而不是下载 谢谢 如果您的服务器未发送 WSDL 文件
  • 连接到 mysql 服务器(localhost)非常慢

    实际上有点复杂 摘要 与数据库的连接非常慢 页面渲染大约需要 10 秒 但页面上的最后一条语句是一个回显 当页面在 Firefox 中加载时我可以看到它的输出 IE 是相同的 在谷歌浏览器中 只有在加载完成后输出才可见 不同浏览器的加载时间
  • Apache 配置:正则表达式禁止访问以点开头的文件/目录

    我想禁用对其名称以点开头的任何文件或目录的访问 我想出了以下方法 但只有当它们直接位于文档根目录中时 它才会禁用对以 DOT 开头的文件 目录的访问
  • Apache Web 服务器:AH00125:请求超出了 FallbackResource 的 10 个子请求的限制

    当我在 apache 2 4 Web 服务器配置中使用 FallbackResource 时 它显示错误 AH00125 请求超出了 10 个子请求嵌套级别的限制 请帮助解决这个问题 是指定url http localhost bv hos
  • htaccess 将所有子域重定向到同一目录

    我希望能够将所有子域重定向到一个文件夹 RewriteCond HTTP HOST example com RewriteRule http example com subdomains 1 L P 例如 如果某些访问sub1 exampl
  • 通过 HTTPS 的隧道

    在我的工作场所 流量拦截器 防火墙变得越来越糟糕 我无法通过端口 22 连接到我的家用计算机 并且缺乏 ssh 访问权限让我感到难过 我以前可以通过将 SSH 移动到端口 5050 来使用它 但我认为最近的一些过滤器现在将此流量视为 IM
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo
  • 如何向 ListView 添加粘性标题?

    我有一个 listView 所以我想添加一个粘性标头 以便它粘在 listView 的顶部 当 listView 中开始不同的类别时 不同的标头会取代它 就像联系人一样 其中 a 为粘性标头位于顶部 直到 b 出现 有没有图书馆可以做 我正

随机推荐

  • 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