无法使用.htaccess屏蔽WordPress页面URL

时间:2019-01-18 作者:ACD

。htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp_test/
RewriteRule ^index\\.php$ - [L]

RewriteRule ^the_image$ wp-content/uploads/2019/01/banner\\.jpg [L]
RewriteRule ^the_page$ sample-page [L]
</IfModule>
当我去example.com/the_image 它显示正确的图像。然而,如果我去example.com/the_page 它显示未找到的页面。

有什么解决办法吗?

3 个回复
SO网友:Justin Waulters

请确保将永久链接设置为/%postname%/(职位名称)。您可以通过导航到“设置”>“永久链接”在管理中执行此操作。

SO网友:Svetoslav Marinov

您能否将这些htaccess规则移动到中的第一个规则。htaccess文件,即高于WP默认重写规则?

SO网友:Loren Rosen

这很复杂。你想要的东西不容易那样做。但你可能的目标可以通过另一种方式实现。

一些背景知识:重写在两个地方完成,通常的配置以两种不同的方式使用它们。首先,Apache进行了一些重写。这里通常的目的是将Apache可以直接处理的请求(因为它只需要使用现有文件(例如图像)进行响应)与WordPress应该响应的请求分开。第二组重写发生在WordPress中,旨在帮助确定要使用的模板。

Apache重写的部分问题是缺少一条规则,导致Apache将内容移交给WordPress。所以\'the_image\' 工作正常,因为重写会产生文件路径,Apache知道如何响应。但是\'the_page\' 不会,因为重写会导致与文件不对应的内容,Apache不知道该怎么做。所以你需要三条结束线

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
(请注意,这三行只是一条重写规则,因为前两行只是影响最后一行应用程序的条件。)

现在,添加这些行仍然会给出一条“找不到”的消息,尽管是来自WordPress而不是Apache。我不太清楚为什么。在Apache重新编写请求之前,它总是查看请求,这可能存在bug。使用PHP7而不是PHP5可能会产生一个深奥的问题。很难确定,因为它涉及376行函数。在任何情况下,WordPress最终都会查找一个名为“the\\u page”的页面,而不是“sample page”。

因此,解决方法是让每个重写工具执行通常期望的操作。特别是,让WordPress处理“the\\u page”的重写。有几个过滤器可以方便地调整WordPress的重写规则。如果你需要的话,我可以添加细节。

相关推荐

Redirect htaccess

我需要帮助重定向我的页面。例如,我有网站https://example.com. 我需要将内容从https://example.com 到https://example.com/blog. 这不是问题,我通过更改主页URL来做到这一点。这很有效。但现在我需要添加来自旧的重定向https://example.com 到https://xmpl.com.我想用。htaccess,但这不起作用。你们能帮帮我吗?以下是我对此的一些尝试,但两者都不起作用。RewriteEngine On RewriteRu