WordPress 永久链接的 mod_rewrite

WordPress 永久链接的 mod_rewrite

我当前的 .htaccess 文件如下所示(由 WP 自动生成)

$ cat .htaccess
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/healthydebate/index.php [L]
</IfModule>

这是标准的 WordPress 重写设置。我遇到的问题是在我的页面中设置站点相对链接(例如,指向 term-and-conditions.php 的页脚链接)。当我在主页上(即:blog/index.html)时,链接有效。当我在子页面(即:blog/categoryname/article-title)时,链接失败,因为作为相对链接,它与 blog/categoryname 相关(即:blog/categoryname/terms-and-conditions.php)。

在有人建议“只使用绝对 URL”之前,这不是一个选项(或者实际上不是一个最佳实践),因为我们在与最终部署服务器不同的域和服务器结构上进行开发,因此每次部署时都需要重写所有绝对 URL。

为了使问题稍微复杂一些,我们还必须对根目录路径保持中立。也就是说,即使博客当前位于 /blog/clientsite/,它最终也可能被移动到其他目录,例如 /clientsite/ 甚至 /STAGING/blogs/clientsite/,因此 RewriteBase 可能有点棘手。

我确信解决方案非常简单,但是 mod_rewrite 绝对不是我的强项。

答案1

您肯定希望在页脚模板中构建绝对 URL,但您不想对其进行硬编码。您可能希望 WordPress 函数获取get_bloginfo('wpurl')您的 WordPress 网站的基本 URL,因为它在您的应用程序配置中指定,然后将您的相对 URL 堆叠在此之上。这是一个非常简单的函数调用,但无论如何,这里是文档:

http://codex.wordpress.org/Function_Reference/get_bloginfo

答案2

您需要添加 RewriteBase /blog

并从 RewriteRule 中删除“blog/”部分

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /healthydebate/index.php [L]
</IfModule>

当你将来移动目录时,只需更新RewriteBase。

相关内容