使用 .htaccess 重写 URL 会产生重复的 mysql 条目

Posted

技术标签:

【中文标题】使用 .htaccess 重写 URL 会产生重复的 mysql 条目【英文标题】:URL rewrite with .htaccess make duplicate mysql entries 【发布时间】:2014-02-06 13:51:24 【问题描述】:

如果使用 .htaccess 重写 url,所有使用 php 的 INSERT 查询都会执行两次(不需要的重复)

我的.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>

还有index.php

<?php define('DB_LOGIN', 'mylogin');
define('DB_PASS', 'mypass');
define('DB_HOST', 'localhost');
define('DB_TYPE', 'mysql');
define('DB_NAME', 'dbname');

$mysql = MySQL_Connect(DB_HOST, DB_LOGIN, DB_PASS);
$mysql_db = MySQL_Select_DB(DB_NAME);

mysql_query("INSERT INTO `pages` (`title`, `slug`) VALUES ('TEST', 'test')"); ?>

加载一次 index.php 后,我在 mysql 中有两个相同的条目。 当我删除 .htaccess 时一切正常,所以问题一定存在。 .htaccess 中的重写定义取自 Wordpress - 我喜欢它。

我尝试了 Medoo 框架,但条目仍然重复。

那么,有什么建议吗? :-)

【问题讨论】:

【参考方案1】:

默认情况下,浏览器会自动请求 favicon.ico 文件。 但是你没有任何 favicon.ico 文件,所以它被重写(你的 htaccess 中的规则)。 这就是你有重复执行的原因。

解决方案:

    添加一个 favicon.ico 文件 如果请求的 url 是 favicon,则不要插入(在 index.php 中) 在您的 htaccess 中使用规则禁止它

【讨论】:

感谢您的回复!我尝试了您的解决方案,但数据库中仍有 2 个条目。在 sql 查询中,我尝试输入 $_SERVER['REQUEST_URI'],因此在 DB 中我看到了这两个请求。如果执行(例如)mysite.com/dashboard,则从 request_uri 保存到 DB:/dashboard/favicon.ico。所以我尝试将favicon.ico 放到我的服务器上,一切正常,即使没有您的解决方案(识别重写的 url)。这样可以吗,还是修复 .htaccess 中丢失的图标会更好? 对调试的反应很好 :) 我编辑了我的答案以解释 favicon 的问题【参考方案2】:

此外,您可以在 SQL 表中设置主键或唯一键(例如,“标题”)。仅此一项就可以防止任何重复条目。

【讨论】:

以上是关于使用 .htaccess 重写 URL 会产生重复的 mysql 条目的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]

如何在php中重写Get变量的url [重复]

htaccess 重写和重定向 SEO 友好的 URL

如何进行简单的url重写[重复]

我可以编辑我的 .htaccess 来编写一些 WordPress URL(自定义重写)吗?

.htaccess URL 重写挑战