69

我的 wordpress 网站的主页似乎显示正确,但如果您点击进入任何其他页面,我会收到以下错误消息:

Not Found

The requested URL /about was not found on this server.

Apache/2 Server at www.wildlionmedia.co.uk Port 80

我不确定是主题问题还是 .htaccess 文件没有被正确重写。

http://www.wildlionmedia.co.uk/

有什么想法可以解决这个问题吗?

# Switch rewrite engine off in case this was installed under HostPay.
RewriteEngine On

SetEnv DEFAULT_PHP_VERSION 53

DirectoryIndex index.cgi index.php

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

# END WordPress
4

20 回答 20

88

如果以上所有点都不起作用。然后试试这个。我尝试过这个。它对我有用。

  1. /etc/httpd/conf/httpd.conf
  2. 将AllowOverride None更改为AllowOverride All
  3. 重新启动apache 服务器。

2017 年更新

对于新版本的 apache,该文件称为apache2.conf

因此,要访问该文件,请键入sudo nano /etc/apache2/apache2.conf并更改块内的对应行<Directory /var/www >

于 2017-04-21T05:37:58.257 回答
66

这不是典型的 Wordpress 重写块。这是:

# 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

http://codex.wordpress.org/Using_Permalinks#Where.27s_my_.htaccess_file.3F

我的 .htaccess 文件在哪里?WordPress 的 index.php 和 .htaccess 文件应一起位于常规选项页面上的站点地址 (URL) 设置所指示的目录中。由于文件名以点开头,因此文件可能无法通过 FTP 客户端看到,除非您更改 FTP 工具的首选项以显示所有文件,包括隐藏文件。如果您通过 Godaddy Hosting Connection 安装 WordPress,某些主机(例如 Godaddy)可能不会显示或不允许您编辑 .htaccess。

创建和编辑 (.htaccess) 如果您还没有 .htaccess 文件,请创建一个。如果您对服务器具有 shell 或 ssh 访问权限,则一个简单的 touch .htaccess 命令将创建该文件。如果您使用 FTP 传输文件,请在本地计算机上创建一个文件,将其命名为 1.htaccess,将其上传到 WordPress 文件夹的根目录,然后将其重命名为 .htaccess。

您可以通过 FTP、shell 或(可能)您主机的控制面板来编辑 .htaccess 文件。

最简单和最快的方法是在仪表板>>设置>>永久链接中重置您的永久链接,并确保 .htaccess 是可写的,以便 WordPress 可以自己编写规则。

并且:您是否知道您正在调用index.cgi您的默认文档而不是index.php?那是错误的。删除index.cgi. 或者尝试删除整行,因为可能不需要在您的服务器上定义默认文档。

于 2012-10-31T01:02:20.480 回答
17

它对我有用:

转到 Wordpress 管理仪表板 > “设置” > “永久链接” > “通用设置”,将单选按钮设置为“自定义结构”并粘贴到文本框中:

/index.php/%year%/%monthnum%/%day%/%postname%/

并单击保存按钮。

我从这个链接得到了这个解决方案

于 2017-07-27T10:11:08.693 回答
13

FWIW:我从头开始重建了 LAMP 服务器并安装了 WordPress。保存我的永久链接设置以生成 .htaccess 文件后,我遇到了同样的问题。原来 mod_rewrite 没有启用。我在 Digital Ocean 上看到了这篇文章
自由贸易协定:

首先,我们需要激活 mod_rewrite。它可用,但未通过干净的 Apache 2 安装启用。

$ sudo a2enmod rewrite

这将激活模块或提醒您该模块已启用。要使这些更改生效,请重新启动 Apache。

$ sudo systemctl restart apache2
于 2019-09-21T13:45:16.437 回答
12

我删除了以前的 .htaccess 文件并通过单击 Settings->Permalinks 中的保存按钮创建了新文件

现在页面开始正常工作......

于 2017-04-01T10:36:01.707 回答
8

Wordpress 网站上有一个值得信赖的答案:

我的 .htaccess 文件在哪里?

WordPress 的 index.php 和 .htaccess 文件应一起位于常规选项页面上的站点地址 (URL) 设置所指示的目录中。由于文件名以点开头,因此文件可能无法通过 FTP 客户端看到,除非您更改 FTP 工具的首选项以显示所有文件,包括隐藏文件。如果您通过 Godaddy Hosting Connection 安装 WordPress,某些主机(例如 Godaddy)可能不会显示或不允许您编辑 .htaccess。

创建和编辑 (.htaccess)

如果您还没有 .htaccess 文件,请创建一个。如果您对服务器具有 shell 或 ssh 访问权限,则一个简单的 touch .htaccess 命令将创建该文件。如果您使用 FTP 传输文件,请在本地计算机上创建一个文件,将其命名为 1.htaccess,将其上传到 WordPress 文件夹的根目录,然后将其重命名为 .htaccess。

您可以通过 FTP、shell 或(可能)您主机的控制面板来编辑 .htaccess 文件。

以下永久链接重写代码应包含在您的 .htaccess 文件中(自 WordPress 3.0 起):

# 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

*取自这里

于 2013-08-19T20:47:55.897 回答
8

它对我有用:

转到 Wordpress 管理仪表板 > “设置” > “永久链接” > “通用设置”,将单选按钮设置为“自定义结构”并粘贴到文本框中:

/index.php/%year%/%monthnum%/%day%/%postname%/

并单击保存按钮。

于 2017-08-28T19:59:20.373 回答
7

我找到了一个非常简单的解决方案。

  1. 转到固定链接 设置
  2. 对 URL使用纯文本
  3. 保存按钮

现在,WordPress 中的所有页面 URL 都应该可以正常工作了。

您可以将 URL 返回到以前的设置,WordPress 将正确地重新生成 URL。我在我的情况下选择Post name,它工作正常。

于 2020-07-16T16:12:07.273 回答
6

选择的答案并没有为我解决这个问题。所以对于那些还在为这个问题摸不着头脑的人,我找到了另一种解决方案!

在我的 Apache 设置中httpd.conf(您可以通过在控制台中运行找到 conf 文件apachectl -V),启用以下模块:

LoadModule rewrite_module modules/mod_rewrite.so

现在该网站按预期工作。

于 2017-04-20T13:53:51.723 回答
6

Hie,

Although late If anybody suffering from the similar issues here is what you can do to allow permalinks by modifying your virtual host file or whereever you are hosting your WP sites.

So basically everything works fine - you set up permalinks to post and suddenly the url dissapears. You went to a lot of disscussion forums (Like me) tried a lot of modifying and got "Permission to server 403" errors or URL not found error. All you have to do is go to the host file, for example 000-default.conf if using a default virtual host or your config file inside sites-enabled,

use in the directory section :

<Directory "path/to/dir">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Donot use the following inside directory

Order allow,deny
Allow from all

The Order and Allow directives are deprecated in Apache 2.4.

Likewise you can setup the directory in /etc/apache2/apache2.conf set the directory for your path and donot use the above - this will cause permission 403 error.

In addition to that you will need to enable mod_rewrite for apache

于 2018-05-10T14:20:18.493 回答
3

尽管在重新生成 .htaccess 文件时几乎没有对这个问题的解决方案进行编码;确实,当站点迁移到某个新服务器时,它对你们大多数人都不起作用。

让我们深入了解一些基础知识。

假设对于我们大多数人来说,WordPress 环境在 PHP 服务器 APACHE 上运行,该服务器控制着我们环境的大部分初始依赖项。同时 .htaccess 的生成也主要依赖于 Apache 的配置。

因此,如果这样说,.htaccess 创建冲突的贡献主要发生在 WordPress 网站从运行 WordPress 环境的旧版本 Apache 和 PHP 的服务器迁移到新版本的 PHP 和 Apache 时。

因为 nrwer 和旧版本的依赖关系不同,这就是为什么新版本的 Apache2 默认不允许 .htaccess 指令创建 .htaccess 文件的原因;因此,我们必须手动将 WordPress 网站的根目录权限从“AllowOverride None”设置为“AllowOverride All”。

相比之下,AllowOverride 指令用于允许在 Web 服务器中使用 .htaccess 以允许在每个目录的基础上覆盖 Apache 配置。

使用以下修复更改 apache2.conf 目录权限设置:

如何处理 GCP WordPress 错误“此页面无法正常工作 example.com 当前无法处理此请求。HTTP ERROR 500

于 2019-09-23T23:47:23.490 回答
2

这是 Wordpress 的另一个版本,原来的版本没有按预期工作。

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^index\.php$ - [END]
    RewriteCond $1 ^(index\.php)?$ [OR]
    RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*)$ - [END]
    RewriteRule ^ /index.php [L]
</IfModule>
# END WordPress

来自此 Github存储库的参考,稍作修改。经过过度测试后,这条规则并不能解决所有问题。我们有一个 Wordpress 网上商店,它有 40 个插件,并且在某个地方存在重写冲突。我真诚地希望下一个版本的 Wordpress 没有 URL 重写。


RewriteRule ^index\.php$ - [L]

语法重写规则

表示字符串的^开始,\转义.或表示任何字符,并$表示字符串的结束。

^index\.php$if http(s)://hostname/ index.php - do nothing[END]标志不仅可以用来终止当前轮的重写处理,而且可以防止任何后续的重写处理。


RewriteCond $1 ^(index\.php)?$ [OR]

语法重写条件

RewriteCond使用作为测试字符串引用从 url http(s): //hostname/bla/bla.php$1的开头到结尾的所有内容的捕获内容。如果在替换或条件中使用,则它引用捕获的反向引用。对于 http(s): //hostname/bla/ble.php捕获into和into 。可以通过 访问多个捕获组。RewriteRule (bla)/(ble\.php)$ -bla$1ble.php$2$3..N

( )将几个字符组合成一个单元,?强制匹配可选。 [OR]flag 允许您将重写条件与逻辑 OR 关系结合起来,而不是默认的 AND。

简而言之,如果bla/bla.php包含 index.php 或下一个条件


RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]

( )将几个字符组合成一个单元,|将字符分隔为子组,并在其中任何一个条件下对它们进行条件化。 [NC]flag 导致 RewriteRule 以不区分大小写的方式匹配。

简而言之,如果bla/bla.php以任何文件类型或下一个条件结尾


RewriteCond %{REQUEST_FILENAME} -f [OR]

服务器变量是 %{ NAME_OF_VARIABLE } 形式的变量,其中 NAME_OF_VARIABLE 可以是从以下列表中获取的字符串:

在此处输入图像描述

%{REQUEST_FILENAME}是匹配请求的文件或脚本的完整本地文件系统路径,如果在引用 REQUEST_FILENAME 时服务器已经确定了这一点。否则,例如在虚拟主机上下文中使用时,与 REQUEST_URI 的值相同。根据 AcceptPathInfo 的值,服务器可能只使用了 REQUEST_URI 的一些前导组件来将请求映射到文件。

-f检查常规文件。将测试字符串视为路径名并测试它是否存在。

简而言之,如果bla/bla.php是一个文件或下一个条件


RewriteCond %{REQUEST_FILENAME} -d

-d检查目录。将测试字符串视为路径名并测试它是否存在。

简而言之,如果bla/bla.php是一个目录


RewriteRule ^(.*)$ - [END] not as in Github [S=1]

此语句仅在其中一个条件返回 true 时执行。

.匹配任何字符*零次或多次。

[S]标志用于跳过您不想运行的规则。跳过标志的语法是[S=N],其中N表示要跳过的规则数(前提是 RewriteRule 匹配)。这可以被认为是重写规则集中的 goto 语句。在以下示例中,我们只想在请求的 URI 与实际文件不对应时运行 RewriteRule。

简而言之,什么都不做


RewriteRule ^ /index.php [L]

[L]标志导致 mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理更多规则。这对应于 Perl 中的最后一条命令,或 C 中的 break 命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。

简而言之,将每个路径重写为 http(s)://hostname/ index.php


我从 apaches.org 文档中一起获取了这个小文档。下面的链接。

于 2018-09-12T01:39:03.850 回答
1

在设置 > 永久链接 wordpress 设置简单并再次测试。

于 2019-01-21T06:35:53.177 回答
0

我使用http://jafty.com/blog/enable-mod_rewrite-on-apache-ec2-linux-server/来确定升级到 PHP 5.6(从 4.9.13 开始)后,它还会更新 http(Apache),我需要编辑 /etc/httpd/conf/httpd.conf 文件,我引用...

基本上,您将添加 All insted of None 到 AllowOverride,您不想编辑主目录配置,您想编辑如下所示的配置:

<Directory “/var/www/html”&gt;

不是:

<Directory />

然后使用以下命令重新启动 Apache:

sudo 服务 httpd 重启

注意 - 在我累了我确实改变了一个不同的目录元素,它没有任何区别,所以确保你为 /var/www/html

本文还解释了如何检查 mod-rewrite 是否启用。

于 2020-06-10T22:34:42.047 回答
0

在我的 MacOS Catalina 机器上,我发现在/etc/apache2/users/my-username.conf默认位置创建了一个附加文件

AllowOverride none

将其更改为All最终使事情对我有用。Mac 面临的挑战是很难使用 Finder 访问这些目录,因此很容易不发现该文件

于 2020-07-16T08:49:13.753 回答
0

我遇到了同样的问题。我的主页可以访问,但在服务器上找不到该文章。

转到cpanel file manager > public_html并删除.htaccess.

然后转到 WordPress 中的永久链接设置,将永久链接设置为您想要的任何内容,然后保存。中提琴一切恢复正常。

这个问题是在我更新 WordPress 之后发生的。

于 2017-06-22T03:45:55.147 回答
0

**解决了永久链接问题 Wordpress ** 1) 登录到 wordpress 仪表板 > 点击设置 > premalinks > 然后选择帖子名称。2) 登录到您的托管服务器后,转到 .htaccess 文件并替换代码。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
于 2017-10-02T12:50:12.873 回答
0

确保在 APACHE 设置中启用了 mode_rewrite。请参阅此处的链接 https://github.com/h5bp/server-configs-apache/wiki/How-to-enable-Apache-modules

然后确保你有正确的 .htaccess https://wordpress.org/support/topic/404-errors-with-permalinks-set-to-postname/

并在任一 Apache 设置中更正虚拟主机设置 如何设置 AllowOverride all

于 2017-10-16T05:51:55.617 回答
0

我正在使用 MacOS,以下操作解决了我的问题:

我复制自: https ://akrabat.com/setting-up-php-mysql-on-os-x-10-7-lion/

cd /etc/apache2

将配置文件授予 root 写入权限: sudo chmod u+w httpd.conf sudo vim httpd.conf

找到#LoadModule php5_module libexec/apache2/libphp5.so

并删除前导 #

找到#LoadModule rewrite_module libexec/apache2/mod_rewrite.so

并删除前导 #

在该部分中找到 AllowOverride None 并更改为 AllowOverride All 以便 .htaccess 文件可以工作。

改回权限:sudo chmod uw httpd.conf

通过在终端中运行以下命令重新启动 Apache:

须藤 apachectl 重启

于 2019-10-28T16:00:34.003 回答
-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
于 2017-09-27T03:50:11.217 回答