从Wordpress URL中删除index.php

时间:2018-02-09 18:23:24

标签: wordpress .htaccess

我是Wordpress的新手,但尝试了所有文档和Stack Overflow帖子以寻找可能的解决方案,但到目前为止还没有一个有效。

我已经验证了mod重写已启用并按预期工作。按照这里提到的所有步骤。 https://wordpress.stackexchange.com/questions/105795/remove-index-php-from-permalinks

还重启了Apache几次,但是当我从永久链接设置中删除index.php路径时仍然会出现404错误。

将wordpress目录重命名为博客,以访问该网站www.xyz.com/blog。现在要求是访问任何博客帖子     www.xyz.com/blog/2018/02/09/my-wp-post,URL中没有index.php。

除博客网站的WP外,我们没有任何其他CMS内容。

永久链接设置(自定义结构):     /index.php/%year%/%monthnum%/%天%/%postname%/

.htaccess文件内容:

BEGIN WordPress <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>

4 个答案:

答案 0 :(得分:1)

我花了很多时间尝试在这里或其他地方回答的许多不同的方法,但没有一个解决了我的问题。

这就是我所做的,它解决了我的问题。

  1. 更改永久链接设置以删除index.php
  2. 更新/保存位于WP安装根目录的.htaccess内容,如果我们在WP管理面板中更改固定链接设置时不允许自动更新。
  3. 这是重要的一步,因为没有多少Q&amp;除了wordpress文档here之外,还详细提到了这一点。具体检查AllowOverride设置并将其更改为All,如果没有此更改,Apache httpd.conf将不会加载.htaccess内容。当然,如果尚未在服务器中启用mod_rewrite,则必须启用它。在我们的情况下,默认情况下启用它,所以不必乱用此步骤。
  4. 还要确保启用FollowSymLinks选项,如WP文档中所述。
  5. 最后但同样重要的是,请确保重新启动Apache服务/服务器以使更改生效。
  6. 在httpd.conf文件中输入:

    <Directory "/var/www/html/blog">
    Options FollowSymLinks
    AllowOverride All
    

答案 1 :(得分:0)

假设Ubuntu 16.04和Apache2

1)激活mod_rewrite。它可用,但未通过全新Apache 2安装启用。

sudo a2enmod rewrite

2)重新启动Apache

sudo systemctl restart apache2.service

3)设置.htaccess

(注意:Apache建议使用服务器配置文件,而不是将规则插入.htaccess,但是,对于本示例,由于对性能的影响很小,因此将规则插入.htaccess就足够了。)

sudo nano /etc/apache2/sites-available/000-default.conf

在000-default.conf中插入以下内容

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

4)重新启动Apache

重复步骤2

5)在Web根目录中创建.htaccess。

touch /var/www/html/.htaccess

将以下内容插入.htaccess

RewriteEngine On

6配置URL重写 (注意:假设使用index.php)

sudo nano /var/www/html/.htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

mod_rewrite是一个有用的Apache模块,可以有效地用于确保人类可读的URL和良好的SEO结果。如果您想了解有关mod_rewrite的更多信息,请查看Apache的mod_rewrite Introduction和Apache的official documentation for mod_rewrite

答案 2 :(得分:0)

简而言之,就像提到的@Cnu一样,互联网上接触到的资源很少的问题是,您的apache配置必须包含AllowOverride FileInfo指令,以使wordpress重写不使用/index.php/就可以工作。 >

从Apache 2.4开始,AllowOverride的默认设置为“无”,这通常是使“漂亮的url”正常工作的障碍(在这种情况下,放弃index.php)。如@cnu所述,您应该仔细阅读以下资源:https://wordpress.org/support/article/using-permalinks/

  1. 确保启用了mod_rewrite ->(为确保创建一个info.php,您稍后将在博客的根目录中删除包含行<?php phpinfo();?>的行,并调用https://domainofyourb.log/info.php
  2. 确保您的.htaccess可通过wordpress写入。 (权限和所有权应允许您的网络服务器(通常使用用户名“ apache”)来编辑文件。
  3. 更改您的wordpress永久链接设置,并检查.htaccess文件是否正确编写。
  4. 检查您的Apache配置(在某些Linux发行版中为etc / httpd / conf / httpd.conf),在博客的<Directory></Directory>部分中是否包含指令AllowOverride FileInfo
  5. FollowSymLinks的Options指令应该是默认值,但是如果提到了Options指令,则添加FollowSymLinks可以达到很好的效果。
  6. 完成所有操作后,请不要忘记重新启动Apache服务器。 (在我的情况下,sudo服务httpd重新启动ymmv)。

PS:编写此答案是因为我无法对cnu的答案发表评论(没有代表),并且想更正1. allowoverride不需要设置为ALL,可以将其设置为简单的“ FileInfo “,2.更新到wordpress doc的链接,并3.提供导致此问题的Apache 2.4更改的背景信息。

答案 3 :(得分:-1)

转到管理页面,控制板->设置->永久链接设置->自定义结构,选择/%postname%/或/%year%/%monthnum%/%day%/%postname%/由您决定。