加载位于博客文件夹外的 index.php 内容以发布单页

Posted

技术标签:

【中文标题】加载位于博客文件夹外的 index.php 内容以发布单页【英文标题】:Loading index.php contents which located outside blog folder for post single page 【发布时间】:2015-07-27 04:40:12 【问题描述】:

我正在为我的静态 php 网站创建 博客 页面作为 WordPress。当博客页面 URL 更改为 pretty permalink (example.com/blog/my-post-page) 时,加载内容(不重定向到 index.php,只有内容加载和 URL 将类似于 http://example.com/blog/my-post-page)index.php(我网站的主页)即位于博客文件夹之外,而不是 single.php 内容。

永久链接 更改为 default (example.com/blog/?p=123) 时,它将完美运行。

我需要网址为http://example.com/blog/my-post-page。

编辑:-我已将自定义结构的永久链接更新为/index.php/%postname%/。但是现在帖子页面显示为example.com/blog/index.php/my-post-page

我认为新 WordPress 版本引发的问题。 (版本 4.2.2)。 从 URL 中删除 index.php 的任何解决方案?

我的目录结构:-

/                                          - Root
/blog                                      - Blog folder
/blog/wp-content/themes/mytheme/           - Theme folder
/blog/wp-content/themes/mytheme/single.php - Post Single page

/index.php                                 - Home page (Loading contents of this file)

我的 htaccess :-

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

当我删除/重命名根文件夹中的 index.php 时,页面会显示 not found 错误。

【问题讨论】:

我不明白你在谈论index.php(根目录,在blog 目录之外)和single.php(它是什么?这个文件有什么在这里做什么?) @JustinIurman 我的帖子页面是 index.php,帖子详细信息页面是 single.php(WP 概念)。这里的问题是,在外部博客文件夹中有另一个名为 index.php 的文件(站点主页)。当我以永久链接(example.com/blog/my-post-page)的形式访问博客中的帖子详细信息页面时,它将重定向到我的博客文件夹外的 index.php 文件。然后我将永久链接更改为 /index.php/%postname%/ 的自定义结构。然后发布详细信息页面加载正确,但链接包含 index.php(example.com/blog/index.php/my-post-page)。 好吧,只是为了确定...您的 WP 目录是 blog 对吗?你能用你当前的 WP htaccess 更新你的问题吗?因为它是重写到根索引而不是博客文件夹索引很奇怪......除非你在 htaccess 路径中遇到问题 @Sree 您的 WP 安装在博客中了吗?如果是这样,根目录中的 index.php 是什么?请提供此信息? @JustinIurman 是的。 WP目录是博客。我已经更新了我的 htaccess 文件。但是我的网站可以在没有 htaccess 文件的情况下运行。 【参考方案1】:

这里需要做两处修改,将permalink改为/%postname%/

并将 .htaccess 更改为关注

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule . /blog/index.php [L]
</IfModule>

【讨论】:

【参考方案2】:

htaccess 中,您可以编写任何正则表达式来重写 url 在你的情况下

RewriteRule ^/blog/\(.+)$ /blog/index.php?postname=$1

这行意味着如果 url 以 /blog/ 开头,/ 之后的任何内容都将作为 postname 参数传递给 /blog/index.phpexample.com/blog/my-post-page 将被重写为 example.com/blog/index.php?postname=my-post-page

你可以从这条规则中排除任何东西

例如让我们排除这个:/blog/wp-content/themes/mytheme/ 它会是这样的:

RewriteRule ^(?!/(.+)/(.+)/(.+)/(.+))/blog/\(.+)$ /blog/index.php?postname=$1

【讨论】:

能否请您使用完整的 htaccess 代码更新答案? 我没有完全理解您想要应用的所有重写规则。你能评论完整的地图吗?在example.com/blog/my-post-page -> example.com/blog/index.php?postname=my-post-page 这种格式?【参考方案3】:

它应该可以工作

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

【讨论】:

和你的情况差不多,看看wordpress.org/support/topic/… 是的。从上面的链接中,我已将永久链接更新为自定义为 /index.php/%postname%/。但现在帖子页面显示为 example.com/blog/index.php/my-post-page。怎么去掉? 在 wp-admin (/wp-admin/options-permalink.php) 中的永久链接中:我在自定义字段 /%year%/%monthnum%/%day%/% 中选择了自定义和这个postname%/ 在您的情况下,它只是“ /%postname%/ ”如果它已经设置为默认设置,请保存更改并将其更改回此设置并重新应用更改以防万一。 .htaccess 应该可以工作

以上是关于加载位于博客文件夹外的 index.php 内容以发布单页的主要内容,如果未能解决你的问题,请参考以下文章

没有 index.php,除主页外的 Magento URL 不起作用

SpringCloud项目配置加载顺序

如何使用 .htaccess 指向目录以加载索引

AngularJS - 如何在多个目录中自动加载js控制器以在主模块中注册?

如何使用多个查询字符串加载内容而不刷新

php手撸轻量级开发框架加载