重写 URL 并使新 URL 显示在地址栏中

2024-03-22

我使用下面的代码来重写一些 URL:

RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteRule ^New_Hampshire/[a-zA-Z0-9_+\-\s]*\.html$ NH/

请记住,下面还有这条规则。

RewriteRule ^([a-zA-Z]{2})/ state.php?state=$1 [L]

现在,我想要实现的是,如果有人去,例如:

www.mydomain.com/New_Hampshire/index.html

我希望位置栏显示:

www.mydomain.com/NH/

通常我可以通过使用来实现这一点[R]标志在最后,但是在这种情况下它不起作用,我猜测这可能与次要规则有关。

这可以吗?

另外,我如何更改它以便它也重定向:

www.mydomain.com/New_Hampshire/

如您所见,上面不包含index.html参考。

最后,如果我想做这些301重定向,我会做类似的事情吗?

RewriteRule ^New_Hampshire/[a-zA-Z0-9_+\-\s]*\.html$ NH/ [R=301]

您需要了解 URL 重写(在您的情况下通过 Apache 的 mod_rewrite 实现)和重定向之间的区别,重定向是 HTTP 规范的一部分,通过向客户端(浏览器)发送标准 HTTP 标头和状态代码来实现。

通过 URL 重写,当 Web 服务器处理请求时,您可以选择将客户端发送的请求 URL 映射到由不同本地路径表示的本地资源。这样做的原因有多种,例如能够向用户呈现干净且简短的 URL、隐藏服务器上资源的内部结构、保护某些资源等。

浏览器通常不知道 URL 已被服务器重写(除非有其他指示),并且仍会在地址栏中显示原始请求的 URL。在客户端不知情的情况下,不可能远程操作客户端请求的 URL。

另一方面,HTTP 重定向是 HTTP 规范的一部分,是一种告诉客户端可以在不同位置找到所请求的 URL 的方法。 Web 服务器通过发送带有重定向 URL 的“Location”标头和告诉客户端发生了什么情况的 HTTP 状态代码来实现此目的。为此有几种 30x 状态代码,最常用的是 301,用于告诉客户端资源已永久移动,从现在开始应通过新 URL 进行寻址;302,用于告诉浏览器资源已找到,但只是暂时的驻留在新的 URL 下(当您在规则中指定 R 标志时,Apache 的实现默认使用 302)。

客户端将收到包含新位置和状态代码的 HTTP 响应,并向新 URL 发出新的 HTTP 请求。如果这是主要请求(即不是对图像或脚本等资源的子请求),它还将替换地址栏中的位置。

See http://httpd.apache.org/docs/current/rewrite/flags.html#flag_r http://httpd.apache.org/docs/current/rewrite/flags.html#flag_r

请注意,Apache 的文档建议将 L 标志与重定向标志一起使用(例如 [R, L] 或 [R=301, L]),否则您可能会得到意外的结果(因为它将继续处理以下规则)。这可能就是您的 R 标志不起作用的原因。

所以,你可以这样做(只是一个例子):

RewriteRule ^New_Hampshire.* NH/ [R=301, L]

这会将客户端重定向到any/New_Hampshire 前缀(带或不带 *.html)URL,为 NH/ 并更改地址栏。

然后是下一个规则:

RewriteRule ^NH/? state.php?state=NH [L]

或者更通用:

RewriteRule ^([a-zA-Z]{2})/? state.php?state=$1 [L]

这将捕获 NH(或其他状态)URL 并将其重写为正确的实际资源 (state.php)。

BUT,这只是一个向您展示规则的示例。您可能需要处理第一条规则中的逻辑。因为某些东西需要将完整的州名称(New_Hampshire)映射到快捷方式(NH),除非您想为每个州编写规则。

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

重写 URL 并使新 URL 显示在地址栏中 的相关文章

  • Avro 消息中的架构

    我看到 Avro 消息嵌入了架构 然后是二进制格式的数据 如果发送多条消息并且为每条消息创建新的 avro 文件 模式嵌入不是一种开销吗 那么 这是否意味着生产者批量处理消息然后写入总是很重要 因此写入一个 avro 文件的多条消息只携带一
  • Flask/Apache 提交按钮用于文件上传

    我有一个在 apache 后面运行的 Flask 应用程序 在我的 index html 页面上有一个文件上传按钮和一个提交按钮 如下所示
  • 仅在大括号外的空格上分割字符串

    我是正则表达式新手 我需要一些帮助 我阅读了一些与此问题类似的主题 但我不知道如何解决它 我需要在不在一对大括号内的每个空格上分割一个字符串 大括号外的连续空格应被视为单个空格 TEST test test test test test t
  • JavaScript 中的正则表达式用于验证十进制数字

    我想要 JavaScript 中的正则表达式来验证十进制数字 它最多只允许两位小数 例如 它应该允许10 89但不是10 899 它还应该只允许一个句点 例如 它应该允许10 89但不是10 8 9 尝试使用以下表达式 d d 0 2 如果
  • 为什么index.html优先于index.php?

    我在服务器上有一个网站 主页是 example com index php 好的 我将一个名为 index html 的文件上传到服务器 根目录 当我在浏览器的 URL 栏中输入站点的域时 我感到惊讶 因为 index html 页面已加载
  • 使用正则表达式如何从十进制数中删除尾随零

    我需要编写一些正则表达式 它接受一个数字并删除小数点后的所有尾随零 语言是 Actionscript 3 所以我想写 var result String theStringOfTheNumber replace the regex 例如 3
  • Javascript 正则表达式来匹配正则表达式

    我正在研究一个特殊的正则表达式来匹配 javascript 正则表达式 现在我有这个正则表达式工作 i g m 例如 foo match i g m gt foo foo undefined foo i match i g m gt foo
  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • 文件名的正则表达式模式

    如果文件名符合以下条件 用户可以将文件放入服务器 它必须以 abc 开头 然后是一个点和一个数字 Valid file names abc 2344 abc 111 Invalid abcd 11 abc ab12 正则表达式是什么 我不能
  • 如何使用正则表达式匹配模式的最后一次出现

    我有一个像这样的字符串 token1 token2 我要匹配 token2 使用正则表达式 它应该匹配的其他可能的情况是 token1 应该匹配 最后一个 token1 应该匹配 最后一个 token1 token2应该匹配 token2
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 正则表达式匹配整个单词[重复]

    这个问题在这里已经有答案了 我在 stackoverflow 上看到了很多关于使用正则表达式进行全词匹配的例子 我有以下情况 我想用 www xyz com 替换 www abc com string RetVal I am going t
  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2
  • Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit 未触发

    我花了几个小时来解决这个问题 但毫无结果 编辑 找到解决方案 参见我的答案 项目背景 我正在构建一个项目Symfony2 这需要一个用于上传大文件的模块 我选择了Node js and Socket IO 我必须从头开始学习 所以我可能会错
  • 正则表达式:删除 xml 的空元素标签

    我想将所有自封闭元素替换为长语法 因为我的网络浏览器在它们上绊倒 Example becomes 我正在使用 python 风格的正则表达式 这些解决方案都不会容纳像 foo gt 这样的属性 尝试 s lt w gt s gt lt 1
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • PHP 拒绝从 var_dump、print 等输出数据

    我目前正在运行 WAMP 服务器 并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据 起初我以为是因为我有一个 htaccess文件的output buffering被禁用 所以我删除了它 仍然
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0

随机推荐

  • Android SurfaceView 预览模糊

    我有一个快速的问题 我正在使用 Android 的 SurfaceView 拍照并保存 然而 预览尺寸和图像质量本身都很糟糕 就像 它非常模糊 图像质量根本没有清晰度 这是我初始化 SurfaceView 的地方 camera setDis
  • 如何以不同的速度流畅播放FLV?

    我需要以不同的速率显示 FLV 的帧 这里有些例子 用户将 擦洗 flv 帧 前 后 flv 在用户交互时需要以一半的速度播放 目前我正在使用装载机最大 http www greensock com loadermax 它是VideoLoa
  • onFlushDirty Hibernate Interceptor 方法永远不会被调用

    问题 Why MyInterceptor onFlushDirty从未被调用过 我延长AbstractEntityManagerFactoryBean在 xml 配置中 例如
  • 如何正确扩展ES6 Map

    我有一个简单的案例 ES6Map 我需要添加自定义get and set to it But Map是一个内置对象 所以我不确定这样做是否有任何警告 我试图搜索子类化 a 是否正确Map 并得到不一致的结果 尚不清楚规范是否允许 哪些 br
  • Jquery next() 问题

    我有这个 div class selection a class current href 1 a div class class text div a href 2 a div class class text div a href 4
  • sudo 使用什么 shell

    我很抱歉 因为这一定是其他人问过的问题 但这似乎是谷歌证明 我试图弄清楚正在调用什么 shell 因为我遇到了不一致的情况 如果我这样做 我的脚本将无法工作sudo 但是如果我的话确实有效sudo bash 然而当我sudo echo 0
  • 使用各种方法无法使系统蜂鸣声在 C 中工作

    我已经尝试过 a 7 windows h 蜂鸣功能等 但没有任何效果 较新的硬件没有内置此功能吗 控制台程序 较新的硬件需要为残障人士提供蜂鸣声 但 Windows 7 移动了Beep 进入实际的 Windows 音频子系统 因此请确保您的
  • 测试两个列表列表是否相等

    假设我在 Python 中有两个列表 l1 a 1 b 2 c 3 l2 b 2 c 3 a 1 测试它们是否相等的最优雅的方法是什么 l1只是元素的一些排列l2 注意对普通列表执行此操作see here https stackoverfl
  • 在采用多个可选参数的方法中,如何指定除第一个参数之外的任何参数?

    我有一个这样的方法 def foo fruit apple cut sliced topping ice cream some logic here end 我怎样才能调用它 我只覆盖顶部参数 但使用其他参数的默认值 像这样 foo hot
  • 导入使用 MultiProcessing Python 的模块

    我希望使用多处理模块来加快某些运输规划模型的运行时间 我已经通过 正常 方法尽可能多地进行了优化 但其核心是一个荒谬的并行问题 例如 对 4 组不同的输入执行同一组矩阵运算 所有信息都是独立的 伪代码 for mat1 mat2 mat3
  • 在 Java Servlet 中生成 HTML 响应

    如何在 Java servlet 中生成 HTML 响应 通常 您会将请求转发到 JSP 进行显示 JSP 是一种视图技术 它提供了一个用于编写普通 HTML CSS JS 的模板 并提供了借助标签库和 EL 与后端 Java 代码 变量进
  • 折线百分比的纬度

    如何沿折线返回给定百分比的 latLng 值 我花了一天时间使用插值和单个节点来完成此任务 他们是不是有一个更简单的函数可以让 grunt 工作 谷歌地图 API v3 谢谢 http www geocodezip com scripts
  • 是否可以在 java jit 上使用 Final boolean 删除跳转?

    正如我们所知 有些人说 java JIT 比 C 更快 我有一些想法 可以利用 JIT 并在运行时代码中删除一些指令 这是我尝试过的示例代码 Created by kadirbasol on 4 6 14 public class Remo
  • jqplot 不同折线图的荧光笔

    我有一系列折线图jqPlot图表 我想要做的是关闭所有图表的突出显示 除了我想要突出显示的一张图表 我怎样才能做到这一点 我还没有一个很好的例子来说明如何做到这一点 也没有时间做一个 但我会在完成时更新 在所有事件中 荧光笔插件都会为每个系
  • PrestaShop:生产前删除所有测试数据

    我正在搜索一个在 MySql 上运行的脚本 以删除 截断表 PrestaShop 数据库版本 1 4 9 上的所有测试数据 客户 订单 购物车等 感谢 帕斯卡 安装 Prestashop Cleaner 并在配置中您可以选择删除目录 订单和
  • RestAssured:如何禁用 PreAuthorize

    我正在使用 RestAssured 测试 API 我调用的方法使用下一个注释 PreAuthorize hasAnyRole ROLE1 ROLE2 ROLE3 我的测试类包含用于测试的活动配置文件 对于测试配置 我们使用 yaml 文件
  • 在 AngularJS 中使用“scope”从另一个控制器调用一个控制器的方法

    我试图通过使用在第一个控制器中调用第二个控制器的方法scope多变的 这是我的第一个控制器中的方法 scope initRestId function var catapp document getElementById SecondApp
  • Haskell 中的字符串格式化

    Haskell 相当于什么 string str string Format 0 1 10 20 C 有一个Printf https hackage haskell org package base docs Text Printf htm
  • 如何制作多列无序列表?

    我正在尝试创建一个如下所示的项目列表 主要要求是列表应该灵活 可以在不接触代码的情况下添加或删除列表项 到目前为止我发现的最好的解决方案是将所有列表项 包括标题 放入 li 标记并使用本文中介绍的技术之一对其进行样式设置分开列出文章 htt
  • 重写 URL 并使新 URL 显示在地址栏中

    我使用下面的代码来重写一些 URL RewriteEngine On Options FollowSymlinks RewriteBase RewriteRule New Hampshire a zA Z0 9 s html NH 请记住