重写 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 显示在地址栏中 的相关文章

  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • Pure Bash 替换捕获组

    我有这个示例字符串 test string 13A6 该字符 数字可以是从 0 到 9 以及从 A 到 F 我想要这个输出 1 3 A 6 我有这个工作 result echo test string sed s g 我想在没有 sed 的
  • Python 非贪婪正则表达式

    我如何制作一个像这样的Python正则表达式 这样 给定 a b c d e 蟒蛇匹配 b 代替 b c d 我知道我可以使用 代替 但我正在寻找一种更通用的解决方案 使我的正则表达式更加干净 有没有办法告诉python 嘿 尽快匹配这个
  • 正则表达式最多匹配五个单词

    我有一个正则表达式 a zA Z 0 9 1 5 它验证该单词包含字母数字字符和少数特殊字符 并且长度不应超过5人物 如何使此正则表达式接受最多五个与上述正则表达式匹配的单词 a zA Z 0 9 1 5 s a zA Z 0 9 1 5
  • Word通配符搜索的正则表达式查找包含至少3个连续数字的括号

    在以下示例中 airspeed AS user 104A 104B device 101 vehicles 105A C 搜索应该找到 104A 104B 101 and 105A C 但不是 AS 我尝试使用 0 9 0 9 0 9 但这
  • netsh 结果到 PowerShell 对象

    我正在尝试与NETSH https ss64 com nt netsh html来自 PowerShell 我想看到这个命令的结果 例如一个对象 但是netsh返回一个字符串 netsh wlan show hostednetwork Ge
  • Perl 正则表达式图灵完备吗?

    我见过 Ruby 和 Perl 程序员做了一些事情复杂的代码挑战 https codegolf stackexchange com questions 3596 regex validating regex完全用正则表达式 这前瞻和后瞻 h
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 扩展 RegExp 以获取文件扩展名

    我知道 已经有很多基于 RegExp 的解决方案 但是我找不到适合我需求的解决方案 我有以下函数来获取 URL 的各个部分 但我还需要文件扩展名 var getPathParts function url var m url match w
  • 用于网络服务器日志分析的软件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我可以得到一些关于 Apache 2 2 访问日志文件的优秀日志分析软件的建议 最好有一些理由 吗 我听说过韦巴利泽 http www w
  • Powershell 将单个字符串与多个正则表达式匹配?

    除了依次迭代每个正则表达式之外 是否有一种更 powershelly 的方式将单个字符串与正则表达式的数组 集合进行匹配 我真正想做的是这样的 database Name match includeRegexArray 考虑到 Powers
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 如何使正则表达式匹配不区分大小写?

    我有以下正则表达式加拿大的邮政编码 http en wikipedia org wiki Postal codes in Canada ABCEGHJKLMNPRSTVXY 1 d 1 A Z 1 d 1 A Z 1 d 1 它工作正常 但
  • Java正则表达式:为什么数字[0-9]、逗号等不是unicode?

    class Test public static void main String args String regex p L System out println 0 matches regex 上面的代码打印 false 但我期待 tr
  • 如何使用正则表达式将字符串分成相同字符的组?

    我有一个这样的字符串 var string AAAAAAABBBCCCCCCDD 并喜欢将字符串分割成这种格式的数组 same characters gt same group 使用正则表达式 Array AAAAAAA BBB CCCCC
  • 正则表达式 数字字符串 数字字符串循环

    我的字符串是 str Move 10 Casio Watch 20 Apple Iphone 100 Apple Macbook to store 我用过了 preg match all 0 9 str matches 但它只匹配产品名称的
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 为什么我的 Apache2::Log 输出用 \n 替换换行符?

    我在 apache2 mod perl 下设置了多个虚拟主机 我用的是ErrorLog指令为每个虚拟主机获取单独的错误日志 仅当我使用 Apache2 Log 时 这才按预期工作 警告 只会记录到常规错误日志中 这样就可以了 最后 但还存在
  • 重写 URL,将 ID 替换为查询字符串中的标题

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

随机推荐

  • 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 请记住