加载位于博客文件夹外的 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.php
。
example.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 不起作用