繁体   English   中英

从 Wordpress URL 中删除 index.php

[英]Remove index.php from Wordpress URLs

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

我已经验证 mod rewrite 已启用并按预期工作。 遵循此处提到的所有步骤。 https://wordpress.stackexchange.com/questions/105795/remove-index-php-from-permalinks

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

将 wordpress 目录重命名为 blog 以访问位于 www.xyz.com/blog 的站点。 现在的要求是访问任何带有 www.xyz.com/blog/2018/02/09/my-wp-post 且 URL 中没有 index.php 的博客文章。

除了用于博客站点的 WP 之外,我们没有任何其他 CMS 内容。

固定链接设置(自定义结构):/index.php/%year%/%monthnum%/%day%/%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>

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

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

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

httpd.conf 文件中的条目:

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

假设 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 Rewrite (注:假设为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 介绍和 Apache 的mod_rewrite 官方文档

简而言之,正如所提到的@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/信息.php )
  2. 确保您的 .htaccess 可被 wordpress 写入。 (权限和所有权应该允许您的网络服务器(通常使用用户名“apache”)编辑文件。
  3. 更改您的 wordpress 永久链接设置,并检查 .htaccess 文件是否正确写入。
  4. 检查您的 apache 配置(在某些 linux 发行版中为 etc/httpd/conf/httpd.conf)在您博客的<Directory></Directory>部分中包含指令 AllowOverride FileInfo
  5. FollowSymLinks 的选项指令应该是默认值,但如果提到了 Options 指令,请添加 FollowSymLinks 以获得良好的度量。
  6. 完成所有操作后,不要忘记重新启动 Apache 服务器。 (sudo service httpd restart 在我的情况下,ymmv)。

PS:写这个答案是因为我无法对 cnu 的答案发表评论(没有代表),并且想要更正 1.allowoverride 不需要设置为 ALL,它可以设置为简单的“FileInfo”,2 . 更新 wordpress 文档的链接,以及 3. 提供导致此问题的 apache 2.4 更改的背景。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM