【问题标题】:.htaccess need help to serve requests to index.php in non root folder.htaccess 需要帮助来处理对非根文件夹中 index.php 的请求
【发布时间】:2022-01-05 00:38:21
【问题描述】:

我有一个特定的网站结构:

root:

styles.css
pages/index.html
folder_with_assets_1
folder_with_assets_2
folder_with_images

我已将 index.html 重命名为 index.php,以消除 URL 中的 .html 扩展

但问题是index.php 不在根文件夹中,而是在pages 文件夹中。 哪个正确的.htaccess 规则可以解决问题,以便将请求重定向到pages 文件夹?

更新 具有文件夹结构的屏幕截图:

【问题讨论】:

  • 您的 htaccess 在哪里?您是如何通过 ftp rename 或通过 htaccess 规则重命名索引文件的?
  • 我还没有放.htaccess,但是应该放在根目录下。我已通过 FTP 重命名。
  • 好的,那么您想将所有 URL 重定向到位于子目录内的 index.php 文件吗?
  • 是的,因为我无法将子文件夹外的 index 文件移动到根目录。标记将简单地中断,因为已经使用 js 和其他 css 文件定义了很多路径。
  • "我已将 index.html 重命名为 index.php 以消除 URL 中的 .html 扩展名" - ?!那么,您在文件结构中列为pages/index.html 的内容真的是pages/index.php? (尽管您不需要物理更改文件扩展名即可删除文件扩展名?)您的“页面”网址是否遵循任何特定格式?

标签: .htaccess


【解决方案1】:

从表面上看,这只是一个标准的前控制器模式。前端控制器是位于子目录内还是直接位于文档根目录中,这在很大程度上是无关紧要的——过程是相同的。

假设您在文档根目录中使用 .htaccess 文件,并且 页面 URL 没有可辨别的模式...

例如,使用 mod_dir FallbackResource:

FallbackResource /pages/index.php

或者,使用 mod_rewrite:

DirectoryIndex /pages/index.php

RewriteEngine On

RewriteRule (^|/)index\.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . pages/index.php [L]

更新#1:

它是包含大量 JS 和 CSS 的“单页”网站格式。只有本地 URL 指向部分(href 标记)和对特定 PHP 文件的 AJAX 调用

在这种情况下,您似乎需要更改 DirectoryIndex - 您根本不需要前端控制器模式(如上所述)。

例如:

DirectoryIndex /pages/index.php

现在,对“主页”的请求,即文档根https://example.com/ 将服务于/pages/index.php


更新#2:

从您的屏幕截图来看,目录列表 (mod_autoindex) 似乎已启用。这些应该在 .htaccess 文件的顶部禁用:

Options -Indexes

更新#3:

从您的屏幕截图中,您在文件结构中所称的“根”似乎实际上并不是您网站的“文档根”,因为您通过/test 子目录访问此位置,即。 localhost/test/。上面的指令假设这些文件位于“文档根目录”中,即。 localhost/ 并且没有 /test 子目录。 (我期望它是如何在您的“实时”环境中构建的?)

如果您的 .htaccess 文件位于 /test 子目录中,并且您正在请求 localhost/test/(根据您的屏幕截图),那么您需要相应地进行调整:

例如:

DirectoryIndex /test/pages/index.php

但是,这在实时站点上不起作用(假设您在实时站点上没有 /test 子目录)。相反,您可以简单地省略斜杠前缀,使其相对

例如:

DirectoryIndex pages/index.php

这在您的情况下应该可以正常工作,因为您有一个 SPA(只是一个主页 URL)。

【讨论】:

  • 感谢您的回答。这很奇怪,但是我的 XAMPP 对更改没有反应……我在第一篇文章中发布了屏幕截图
  • @Kuzma 实际上,根据您在 cmets 中的更新,听起来您只需要更改 DirectoryIndex(在我更新的答案中)。您不需要前端控制器模式(在您的屏幕截图中)。
  • @kuzma 啊,从您的屏幕截图看来,您的文件位于/test 子目录中,而不是“文档根目录”。在这种情况下,您需要从 DirectoryIndex pages/index.php 指令中删除斜杠前缀。大概您的实时网站不使用/test 子目录,所以不会有这个问题。
  • 感谢您的解释!
  • @Kuzma 不客气。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多