php - 迁移到新服务器后,wordpress 管理员无法发布新帖子

标签 php mysql wordpress apache .htaccess

读了很多书来解决这个问题,但我卡住了......:-(

将 WP 站点从共享移动到 linode VPS。

配置:

WordPress 3.6.1
mysql Ver 14.14 Distrib 5.7.5-m15,适用于使用 EditLine 包装器的 Linux (x86_64)
PHP 5.5.18-1+deb.sury.org~precise+1 (cli)(构建时间:2014 年 10 月 17 日 15:11:34)
Apache
服务器版本:Apache/2.4.10 (Ubuntu)
服务器构建:2014 年 7 月 22 日 22:57:50
DB 是 ut8

虚拟主机配置文件:

DocumentRoot /home/userName/webSite

<Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    <Directory /var/www/>
        Options FollowSymLinks MultiViews
        AllowOverride None
        Require all granted
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Require all granted
    </Directory>

.htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

wp_usermeta 表中的管理员:

wp_capabilities
a:1:{s:13:"administrator";s:1:"1";}

这样登录就ok了。
编辑帖子有效
问题:
新帖子的“提交以供审核”按钮取代了“发布”按钮!

单击“提交以供审核”会显示“您没有合适的权限来编辑帖子”

而且我似乎找不到问题。
我尝试修复文件和文件夹权限。
将 define('WP_HOME' 和 define('WP_SITEURL' 添加到 wp-config

我什至不知道从哪里开始......

wp_posts 表在 ID 上有 A_I。 wp_posts DUMP 显示:

--
-- AUTO_INCREMENT for table `wp_posts`
--
ALTER TABLE `wp_posts`
MODIFY `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7633;

7633 是下一个帖子 ID。

我该如何解决这个问题?? 请提出任何问题,因为我已经完成了网络上建议的大部分修复。

谢谢:-)

最佳答案

迁移意味着环境的改变

您的环境中有什么? Mysql一个!

鉴于涉及迁移,我敢打赌这与您的数据库有关...您可以检查日志以找出哪些查询失败了。对我来说是sql_mode ,具体与日期时间中的 0s 不被接受有关。 (发生在新的帖子草稿上)。

如果这是您的问题,请继续阅读以解决 sql_mode。

检查你的sql_mode

要检查您当前的 sql_mode 是什么,您可以在 mysql 中执行此操作(可能作为 root mysql 用户):SELECT @@sql_mode;

Wordpress 使用 0 表示“空”日期时间,而某些 SQL 模式设置不允许这样做。我相信有一些插件试图在应用程序层(在 wordpress 中)解决日期为 0 的问题,但我认为这可能有点 hacky...

我选择切换我的 sql_mode 并使我的 sql 模式仅为 NO_ENGINE_SUBSTITUTION 因为 wordpress 是唯一使用我的数据库的东西,我对我的项目的 sql_mode 没问题。您可能需要保留 sql_mode 设置中的大部分设置,但只需删除日期选项中的无零,因此您应该在重置之前检查当前的 sql_mode 是什么。

默认的sql_modes是什么?

The default SQL mode in MySQL 5.7 includes these modes: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION.

因此,如果您发现 NO_ZERO_IN_DATE, NO_ZERO_DATE 存在,您可能希望将其删除,并保留其余部分。

我在哪里更改我的sql模式?

To set the SQL mode at server startup, use the --sql-mode="modes" option on the command line, or sql-mode="modes" in an option file such as my.cnf (Unix operating systems) or my.ini (Windows). modes is a list of different modes separated by commas. To clear the SQL mode explicitly, set it to an empty string using --sql-mode="" on the command line, or sql-mode="" in an option file.

我在服务器上为mysql程序设置了options.cnfmy.cnf

关于php - 迁移到新服务器后,wordpress 管理员无法发布新帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27423160/

相关文章:

php - 每个用户有多少 session 变量被认为太多了? - PHP

php - 同一页面上的 2 个不同模态会引发错误

php - 如何将大查询拆分为小查询并将它们作为单个查询附加

php - 使用 PHP 的 MySQL 连接字符串

javascript - 单击 anchor 标记时淡入和淡出

php - codeigniter 查询中 where 子句中的未知列

java - 使用JDBC向MySQL插入数据

php - 防止 HTML Tidy 弄乱元标记(架构标记)

wordpress - 使用 XAMPP 重定向到安装页面的现有 Wordpress 站点的本地安装

php - 暂时允许某些用户角色观看某些受限制的内容