【问题标题】:URL rewrite with .htaccess make duplicate mysql entries使用 .htaccess 重写 URL 会产生重复的 mysql 条目
【发布时间】: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 框架,但条目仍然重复。

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

【问题讨论】:

    标签: php mysql .htaccess mod-rewrite


    【解决方案1】:

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

    解决方案:

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 2023-03-20
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多