【问题标题】:What do these htaccess directives mean?这些 htaccess 指令是什么意思?
【发布时间】:2021-10-30 05:57:15
【问题描述】:

你能帮我理解这个.htaccess代码吗?

RewriteEngine On 
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

我不明白是否正确,但如果我写我的网站 url 什么都不会发生....空白页。 谢谢

如果你愿意,我可以添加其他信息

【问题讨论】:

  • "如果你愿意,我可以添加其他信息" - 是的,请!就目前而言,这里没有问题。这些指令是否“正确”完全取决于您要做什么。这些指令不一定是“错误的”。 (虽然倒数第二条规则有点奇怪和错位。)你到底想做什么?你提出什么要求?您希望如何处理这些请求? (你从哪里得到这些规则的?)等等。

标签: apache .htaccess mod-rewrite


【解决方案1】:

简而言之,这些指令在内部将所有未映射到物理文件或目录或以.php 结尾的请求(无论它们是否作为文件存在)重写为文档根目录中的/index.php

这些指令实际上并没有什么“错误”。但是它们是否“正确”完全取决于您要做什么。

这是一种“标准”的前置控制器模式。

但是,有一件事......这些指令依赖于在父配置中设置的DirectoryIndex index.php。这通常会在主服务器配置中设置,尽管 Apache default(如果未明确设置此指令)是 index.html,而不是 index.php。如果未将其设置为 index.php,则在请求文档根目录时不会调用 /index.php。尽管在这种情况下您会看到 403 Forbidden 响应,而不是“空白页”。

“空白页”更可能表明您的应用程序存在错误。

RewriteRule ^(.*\.php)$ $1 [L]

此规则防止以.php 结尾的任何请求被重写/路由到/index.php。我在 cmets 中说这有点“错位”,因为如果您要执行此类操作,将其与第一条规则结合起来并避免不必要的文件系统检查会更有效/更简单。

例如:

DirectoryIndex index.php

RewriteEngine On 
RewriteBase /
RewriteRule \.php$ - [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule . index.php [L]

就目前而言,RewriteBase 指令实际上并不是必需的。

但需要澄清的是,此更改对这些指令的结果没有影响(除了可能添加了 DirectoryIndex 指令)。它只是让它更高效/更整洁。

【讨论】:

    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 2019-11-04
    • 2013-05-09
    • 2013-08-20
    • 2014-12-24
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多