mod_rewrite 删除 GET 变量

2023-12-01

我正在尝试采取

example.com/home?lang=fr&foo=bar

并重定向到

example.com/fr/home?foo=bar

I tried

    RewriteCond %{QUERY_STRING} lang=([a-z]{2})&?
    RewriteRule ^(.*) /%1/$1 [R=307]

但我得到了一个重定向循环。 这是因为在“fr”移动到请求字符串的前面后,lang=fr 并未从查询字符串中删除。这导致:

example.com/fr/fr/fr/fr/fr/fr/fr/fr/fr/....

我可以用

    RewriteRule ^(.*) /%1/$1? [R=307]

但这也从查询字符串中删除了我想保持完整的 foo=bar

我找不到一种从查询字符串中仅删除一个变量的方法。我确信有一个简单的解决方案,但谷歌没有帮助。 谢谢


作为对 @whoisgregg 答案 (+1) 的补充,这是对 apache wiki 的一个很好的改编。那里的规则并不完全好(例如,此页面上通过查询字符串进行的访问控制不会抵抗一点 urlencoding)。

我们有一个适用于测试用例的可行解决方案,但某些扩展测试可能会失败:

RewriteCond %{QUERY_STRING} ^(.*)lang=([a-z]{2})&?(.*)$
RewriteRule (.*) /%2/$1?%1%3 [R=307]

foo.php?foo=bar&novlang=fr&toto=titi => /fr/foo.php?foo=bar&novtoto=titi

这里的lang=检测到部分,但如果任何参数以lang你会有问题的。

所以,我们需要一些修复,我这周一直在研究这个主题,我认为这是一个更好的版本:

RewriteCond %{QUERY_STRING} (.*)(^|&|%26|%20)lang(=|%3D)([^&]+)(.*)$
RewriteRule (.*) /%4/$1?%1%5 [R=307]

foo.php?foo=bar&novlang=fr&toto=titi => not matched (normal, no lang=)
foo.php?foo=bar&lang=fr&toto=titi&b=a => fr/foo.php?foo=bar&toto=titi&a=b

这里唯一悬而未决的问题是lang可能是部分或完全 url 编码并且不会被检测到,但这种情况很少见。我还删除了 lang 值仅包含 2 个字符的控制。我认为([^&]+)更好,这意味着所有字符,直到我匹配&.

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

mod_rewrite 删除 GET 变量 的相关文章

  • 未为 OPTIONS Ajax 请求设置标头

    我有一个ascx page GetToken ashx public void ProcessRequest HttpContext context context Response ContentType text plain conte
  • ajax“GET”调用返回 jsonp 正常,但回调产生“未定义”数据

    我正在使用来自 html 页面的 ajax jquery 调用来访问跨域 Web 服务 虽然我可以使用 firebug 查看 jsonp 数据 但我无法将其加载到变量中 甚至无法显示它 出于调试目的 尝试使用 jsonpCallback s
  • 获取和编辑 GET 变量以创建超链接的方法

    假设我有这样的网址somefile php sort id way desc 我想编写一个函数 或使用已经创建的函数 让我将下一个变量添加到 URL 并设置我要删除的变量 我想到了类似的事情function editGetVar add l
  • PHP、htaccess:在 URL 中应用页面标题

    我想在 URL 中应用页面 HTML 标题 例如 在这里 stackoverflow url 是这样的 http stackoverflow com questions 10000000 get the title of a page ur
  • 通过删除空 GET 变量并简化变量名称来缩短 URL

    我正在开发一个网站 在提交后组成一个 URLGET form 表单值作为一组变量传递 其中必须至少定义一个变量才能在数据库上进行搜索 我想将网址缩短为删除空表单元素并使其更加用户友好简化变量名称 目前 URL 如下所示 只是带有更多变量 我
  • 使 href(锚标记)请求 POST 而不是 GET? [复制]

    这个问题在这里已经有答案了 a href employee action Employee1 a 当我单击 Employee1 链接时 GET 请求将发送到服务器 我想让它 POST 而不是 GET 请求 有没有办法改变 href 的默认
  • Angular2通用部署到apache远程服务器

    我在将 Web 应用程序部署到 Apache 远程服务器时遇到问题 我已经通过以下步骤部署了一个使用 RESTful API 服务 用 PHP 编写 托管在 public html api 的标准 Angular2 Web 应用程序 在项目
  • Flask/Apache 提交按钮用于文件上传

    我有一个在 apache 后面运行的 Flask 应用程序 在我的 index html 页面上有一个文件上传按钮和一个提交按钮 如下所示
  • 在apache中有条件地设置缓存头

    我想根据访问文件的路径有条件地设置缓存标头 基本上 访问http www example com cache cache key 应该为具有遥远未来缓存标头的文件提供服务 我使用重写规则来设置环境变量 然后尝试根据该变量设置缓存控制标头 然
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • apache_request_headers() 与 $_SERVER

    据我所知 apache request headers 提供与以下相同的信息 SERVER 但按键略有不同 为什么有人应该使用apache request headers 而不仅仅是从那里获取这些信息 SERVER 我在 Centos 上使
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 无法分配内存:fork:无法创建新进程?

    我们的托管在aws 最近 我们的博客从wordpress to aws 我们遇到服务器响应时间明显延迟的情况 主要是在访问博客时 以下是来自error log file Wed Feb 25 06 10 10 2015 error 12 C
  • php 无法连接到 mysql,错误为 13(但命令行可以)

    我在新安装的服务器中遇到了奇怪的情况 谷歌这次似乎无法帮助我 我无法从我的 php 代码连接到 远程 mysql 当我尝试从同一服务器上的命令行连接时 连接成功 无法连接 无法连接到 MYSQL SERVER 上的 MySQL 服务器 13
  • PHP设置全局环境变量的方法

    我已阅读问题 答案here https stackoverflow com questions 13568191 how to get system environment variables into php while running
  • 从 Django 运行 shell 命令

    我正在 Django 中开发一个网页 使用 apache 服务器 需要调用 shell 命令来启用 禁用一些守护进程 我尝试这样做 os system service httpd restart 1 gt HOME out 2 gt HOM
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • GET 和 POST 方法有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 什么时候用POST 什么时候用GET https stackoverflow com questions 46585 when do you use post and when do you use

随机推荐

  • Codeigniter 查询生成器在 where_in 中使用 implode 函数

    这是我使用 implode 函数的正常 sql 查询 SELECT from search result WHERE skills IN implode s id 现在我想将其转换为 codeigniter 形式 我尝试了以下代码 但失败了
  • Unicode 组合字符的实际最大数量是多少?

    我正在寻找在非组合字符之后出现的 unicode 组合字符的最大数量在现实的自然文本中 我知道在 unicode 文本中 文本中的任何位置都可以放置任意数量的组合 但是 我正在编写一个专门的应用程序 该应用程序必须在资源有限的情况下运行 并
  • React - 从同级组件调用函数

    假设我有一个组件树 如下所示
  • 在基于 iframe 的文本编辑器中禁用 Firefox 和 Chrome 拼写检查

    有很多关于如何禁用 html 中的拼写检查的信息textarea元素通过使用spellcheck false 然而 要使文本区域具有更高级的功能 必须使用iframe with designMode on 参见例如这一页 这是在 GWT 中
  • 使用 C# 错误,可空对象必须具有值 datetime

    我在 C datetime 中遇到一个问题 我已经尝试了很多时间 它不是 给出问题的解决方案 所以给我一个解决方案 var accommodationcategoryList EmployeeAttendanceCacheMaster Ge
  • sprintf():作为参数的小数位数

    目前的解决方案是 dp lt 2 sprintf paste0 dp f 0 123 期望的解决方案没有 Paste0 并且类似于 sprintf 2 d f 0 123 2L 除了它有效之外 您可以使用 插入dp进入格式 dp lt 2
  • 使用“push”或“sub”x86 指令时,堆栈内存是如何分配的?

    我已经浏览了一段时间 我试图了解在执行以下操作时如何将内存分配给堆栈 push rax 或者移动堆栈指针为子例程的局部变量分配空间 sub rsp X Move stack pointer down by X bytes 我的理解是 堆栈段
  • 我可以信任 imageres.dll 系统图标索引吗?

    我制作了一个自定义目录树控件 它使用从中提取的系统图标imageres dll文件 我的意思是该文件是从 Windows 目录中读取的 因此根据 Windows 版本 该文件会有多个版本 下面是确切的 C 片段 ImageList Imag
  • javascript 中的 MM/DD/YYYY HH:MM:SS AM/PM 日期验证正则表达式

    我正在尝试在 JavaScript 中验证 MM DD YYYY HH MM SS AM PM 格式的日期 我无法找到任何好的答案 尝试了其他结果但没有成功 在以下问题中 asp net 已提出此问题 但 javascript 未提出此问题
  • ajax请求不同的主机

    我的网页中有以下 JavaScript var xhr new XMLHttpRequest xhr open GET http www google com true xhr onreadystatechange function if
  • SPARK - 在数组中的值上连接 2 个数据帧

    我找不到一种简单而优雅的解决方案来解决这个问题 我有一个 df1 与此列 guitars array nullable true element long containsNull true 我有一把吉他制成的 df2 还有一个与我的 df
  • 在 HTML 中查找单词

    我试图在 HTML 字符串中找到给定的单词并在其周围添加一个跨度 我现在正在做的是这样的 function find what String where String var regexp RegExp new RegExp what gi
  • JTable 不显示列名称

    这是我的代码 public class DownloadMainView extends JFrame private ArrayList
  • 如何通过 Windows API 访问系统规格?

    如何从 Windows API 访问有关计算机规格的信息 我需要查看注册表吗 如果需要的话 在哪里 我希望我的程序能够访问的一些关键信息包括显卡型号和规格 支持的 OpenGL 和 DirectX 版本 支持的屏幕分辨率 CPU 信息 总
  • SQL批量复制内存问题

    我们在 C 中使用 SqlBulkCopy 类 在sql中插入批量数据 我们有一个包含 1000 万条记录的表 我们正在循环中批量插入 10 000 条数据 我们面临物理内存问题 内存增加而不是减少 下面是我们的代码 当使用sql批量复制时
  • 使用 Zenhub API 从 Github 问题创建史诗

    这是一个后续问题如何使用 zenhub 设置问题管道 我正在尝试在 Python 脚本中将问题转换为史诗 我可以将问题转换为史诗 但当我尝试在创建史诗时添加问题时 出现错误 这有效 zenhub headers X Authenticati
  • 使用 Google Checkout 轮询 API 验证 Android 应用内购买时出现延迟

    我正在尝试使用 Google Checkout API 从我的服务器验证 Android 应用内购买 根据另一个查询 Android 市场上的应用程序 没有 HTTP 通知 我没有收到回调 所以我使用轮询 API 它工作正常 只是在轮询收到
  • BackgroundWorker 线程必须是 STA

    我有一个BackgroundWorker来调用一个函数来在BackgroundWorker DoWork上执行一个很长的过程 当函数中发生错误时我会提示一个自定义的消息框 WPFMessageBoxResult result WPFMess
  • 双击突出显示单元格值以进行复制

    我有一个jqGrid 我想突出显示一行 ondbClickRow 中的特定单元格 这将使用户能够轻松地将单元格的值复制到剪贴板 有人可以指导我如何做到这一点吗 谢谢 一般来说这是可能的 但您可能应该关闭行选择以立即看到突出显示 所以代码如下
  • mod_rewrite 删除 GET 变量

    我正在尝试采取 example com home lang fr foo bar 并重定向到 example com fr home foo bar I tried RewriteCond QUERY STRING lang a z 2 R