AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 713991
Accepted
Safado
Safado
Asked: 2015-08-14 08:41:57 +0800 CST2015-08-14 08:41:57 +0800 CST 2015-08-14 08:41:57 +0800 CST

一些 mod_rewrite 语法说明

  • 772

我们最近继承了一些代码,我正在查看其中一个站点的 .htaccess 文件。我了解大多数重写规则集的最终结果是什么,我只是不确定某些语法。背景信息:CentOS 7 和 Apache 2.4,运行 Concrete5 CMS。

示例 1:

RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

我了解 %{HTTPS} 是 mod_rewrite 提供的特殊变量之一,其计算结果为on或off。在之前的规则中,我看到RewriteCond %{HTTPS} =on哪个更有意义,并且与文档在此处显示的内容一致。所以在上面的例子中,我有以下问题:

  1. %{HTTPS}s 中的尾随“s”是什么
  2. 为什么模式使用 ^on 而不是 =on。这是有效的吗?
  3. 我知道括号中的任何内容都可以用 %1 进行反向引用,但它在这里的位置对我来说真的没有意义。如果 %{HTTPS} 将评估为onor off,则放置 (s)| in Pattern 会让它永远不匹配条件,对吧?PIPE 是做什么用的?

示例 2:

#redirect calls to index.php without get parameters to non-www
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{THE_REQUEST} /index\.php\s [NC]
RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE]

我不太了解第二个 RewriteCond。

  1. \sindex.php 的末尾在做什么?

示例 3:

最后,我们有

#Standard C5 pretty urls
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}/index.html !-f 
RewriteCond %{REQUEST_FILENAME}/index.php !-f 
RewriteRule . index.php [L]

在 RewriteRule 中,模式.在正则表达式中表示“任何字符”。

  1. 这个规则是说“如果满足上述条件,用 index.php 替换任何字符”?这条规则在做什么?
.htaccess
  • 1 1 个回答
  • 124 Views

1 个回答

  • Voted
  1. Best Answer
    Tero Kilkanen
    2015-08-15T13:19:41+08:002015-08-15T13:19:41+08:00

    请忽略这个答案,它在很多方面都是错误的。

    示例 1:

    此规则用于将非 HTTP 连接转发到 HTTPS 连接。所以:

    1. 尾随的 s 用于 SSL。
    2. ^on用于检查“如果 HTTP 未激活”。^表示否定匹配。
    3. 带%符号的引用是指正RewriteCond则表达式。在这种情况下,%1指的是(s)捕获组,因此%1是s当 HTTP 不活动时。

    编写方式RewriteRule有点过于复杂,我认为可能有一种更简单的方法来实现它。但是,它完成了它的设计目的。

    示例 2:

    1. \s匹配空白。所以,这个 RewriteRule 匹配/index.php,即 . 后面的一个空格.php。我认为第二个RewriteCond使这条规则根本不起作用,除非网站软件的某些部分生成了不正确的 URL。

    示例 3:

    1. 它的意思是,“如果满足上述条件,请将 URL 中的任何字符串替换为 index.php”。.简单地匹配任何字符串,并且是使用的index.php替换。这里的匹配标准RewriteRule不需要更具体,因为任何不存在的 URL 都会发送到index.php.
    • -1

相关问题

  • apache重写以将文件夹分配给域

  • Apache conf 或 .htaccess 规则将 404 重定向到特定文件类型的另一个位置

  • 如何让 Apache2 重定向到子目录

  • .htaccess - 删除所有 cookie

  • 我的 .htaccess 文件是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve