荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 18|回复: 0

apache的rewrite规则

[复制链接]

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
发表于 2025-5-31 20:59 | 显示全部楼层 |阅读模式
  1. https://www.doubao.com/thread/wde4055848889c796


  2. ##################################################################################################################
  3. apache的rewrite规则 配置号以后是由客户端访问新的网址吗?

  4. ######################################
  5. 在配置Apache的Rewrite规则后,客户端是否访问新网址,取决于你设置的是哪种重写类型。主要有以下两种情况:

  6. 1. **内部重写(Internal Rewrite)**:客户端不会访问新网址。服务器在内部将请求的URL转换为另一个URL,而客户端并不知道这个转换过程。客户端的浏览器地址栏中显示的仍然是原始的URL。这种情况通常使用`[L]`标记(最后一个规则),但不使用`[R]`(重定向)标记。

  7. 2. **外部重定向(External Redirect)**:客户端会访问新网址。服务器返回一个HTTP状态码(如301或302),告诉客户端请求的资源已移动到新的URL。客户端浏览器会自动访问这个新URL,并且地址栏会更新为新的URL。这种情况需要在RewriteRule中添加`[R]`标记,例如`[R=301]`或`[R=302]`。

  8. ### 示例

  9. 以下是两种情况的示例配置:

  10. **内部重写示例**:
  11. ```apache
  12. RewriteEngine On
  13. RewriteRule ^old-page$ new-page [L]
  14. ```
  15. 在这个例子中,当用户访问`http://example.com/old-page`时,服务器会在内部将请求转换为`new-page`,但浏览器地址栏仍显示`http://example.com/old-page`。

  16. **外部重定向示例**:
  17. ```apache
  18. RewriteEngine On
  19. RewriteRule ^old-page$ new-page [R=301,L]
  20. ```
  21. 在这个例子中,当用户访问`http://example.com/old-page`时,服务器会返回一个301状态码,告诉浏览器重定向到`http://example.com/new-page`。浏览器会自动访问新URL,并且地址栏会更新为新的URL。

  22. ### 总结
  23. - 如果你希望客户端访问新网址,需要使用带有`[R]`标记的重定向规则。
  24. - 如果你希望客户端不知道URL的变化,只需要服务器内部处理请求,不使用`[R]`标记。

  25. ##################################################################################################################

  26. RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]   这个是外部还是内部重定向

  27. ######################################
  28. 这个 RewriteRule 是**外部重定向**。分析如下:

  29. ### 关键标志解析
  30. ```apache
  31. RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
  32. ```
  33. 1. **`R=permanent`**(等同于 `R=301`):明确指示 Apache 返回 **HTTP 301 永久重定向**,强制客户端(浏览器)重新请求新 URL。
  34. 2. **`NE`**(No Escape):仅影响替换字符串的编码,不改变重定向类型。
  35. 3. **`END`**(或 `L`):终止当前重写循环,但不影响重定向行为。

  36. ### 重定向逻辑
  37. - **匹配规则**:`^` 匹配所有请求路径(空字符串开头)。
  38. - **替换目标**:将请求重写到 `https://当前域名/原请求路径`。
  39. - **效果**:客户端请求会被强制跳转到 HTTPS 版本,且浏览器地址栏会更新为新 URL。

  40. ### 典型应用场景
  41. 常用于**强制 HTTPS 访问**,例如:
  42. - 访问 `http://example.com/page` → 浏览器自动跳转至 `https://example.com/page`
  43. - 用户会看到地址栏更新,且浏览器会重新发送请求到新 URL。

  44. ### 与内部重写对比
  45. 若需内部重写(服务器端透明处理),应**移除 `R` 标志**,例如:
  46. ```apache
  47. # 内部重写示例(无 R 标志)
  48. RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE]
  49. ```
  50. 但这种配置会导致问题:客户端仍使用 HTTP 发送请求,而服务器返回 HTTPS URL,可能引发循环重定向或连接错误。因此,强制 HTTPS 必须使用外部重定向(带 `R` 标志)。

  51. ### 结论
  52. 该规则通过 **301 永久重定向**将 HTTP 请求转换为 HTTPS 请求,属于**外部重定向**。
  53. ##################################################################################################################
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-6-18 03:26 , Processed in 0.012033 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表