【问题标题】:.htaccess RewriteRule Not Working on Wordpress.htaccess RewriteRule 不适用于 Wordpress
【发布时间】:2017-09-26 13:23:31
【问题描述】:

一位客户要求我用 WordPress 为他们建立一个网站。我不太擅长 WordPress,所以解决方案可能已经在这里了,但是我已经阅读了大约十几个 SO 问题并且还没有找到答案,所以我想我会发布我自己的。

这是我的 .htaccess 文件:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^podcast/([^/]+)$ /podcast?slug=$1 [QSA,L] #I added this

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

有了这样的文件,它会将我重定向到我的 404 页面。即使 URL 是正确的 (/podcast/word),浏览器控制台也会显示它是 404。

然后我假设如果我添加一个“R=301”标志,它会解决这个问题。但如果我这样做:

RewriteRule ^podcast/([^/]+)$ /podcast?slug=$1 [R=301,QSA,L]

然后我的浏览器将我带到/podcast?slug=word

我不确定这是由我的 .htaccess 还是由 WordPress 404 文件引起的。如果有人想看到它,我的 404.php 文件是:

<?php get_header();  ?>

<section class="white">
    <div class="wrapper internal">
       <!--generic error message-->
    </div>
</section>

<?php get_footer(); ?>    

我的 .htaccess 文件在使用 Wolf CMS 时运行良好,但不适用于 WordPress。由于我仍在学习 WordPress,因此非常感谢任何帮助。

编辑

我正在使用 slug 从 RSS 提要中引用播客。我希望将 http://example.com/podcast/?slug=example-podcast 变成 http://example.com/podcast/example-podcast,但每当我这样做时,我都会得到 404。

【问题讨论】:

  • 让 Wordpress 完成这项工作。登录到管理页面。选择设置,然后选择永久链接。选择您想要使用或创建您拥有的选项。
  • @jeff 我认为我没有正确解释自己。我在问题中添加了一些附加信息。蛞蝓不是实际站点的一部分。我用它来引用外部资源。
  • 您的 wordpress 设置是什么样的?管理目录是否在子目录中,但站点在主目录中(因此站点将位于 / 但所有 wp 文件都位于 /wordpress 中)?还是所有东西都在同一个文件夹中?
  • 另外,你可以在这里测试你的正则表达式:regex101.com - 你能确保它们正常工作吗? (只要确保当你在那里测试时,你转义 / 字符 - 实际上我不知道你是否必须为 htaccess 转义 [^/] 部分中的 /)。
  • 为此使用 WP rewrite API 而不是 .htaccess。

标签: php wordpress apache .htaccess mod-rewrite


【解决方案1】:

尝试用此代码替换您的 .htaccess。

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

# END WordPress

【讨论】:

  • 这有什么帮助?这是默认的 .htaccess 文件。
  • 除非您的 wordpress 文件有不同的目录,否则请不要撤消此默认 .htaccess 文件。
  • 两年后我知道得更清楚了。谢谢你。
【解决方案2】:

示例:如果我将 wordpress 放在名为“a”的文件夹中作为子目录,那么我将像这样编辑我的 .htaccess

# BEGIN WordPress
<ifmodule mod_rewrite.c="">
RewriteEngine On
RewriteBase /a/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /a/index.php [L]
</ifmodule>

# END WordPress

【讨论】:

  • 然后确保您还按照@jeff 中的步骤选择设置,然后设置您的永久链接。我认为可以。
【解决方案3】:

您还可以将永久链接设置为帖子名称。如果您的 url 是由帖子名称而不是 php 类型的 url 定义的,这将解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多