使用 .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 查询[重复]