Задать вопрос
VGVolkov
@VGVolkov
самоучка

Как работает .htaccess?

В адресной строке ввожу draft.local/test.php . Имеется вот такой .htaccess
RewriteEngine On
RewriteBase /

#RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} !/test\.php
RewriteRule .* test.php


в test.php есть код с запросом к БД на добавление одной записи:
$host='localHost';
$user='root';
$pass='';
$dbName='testDB';
$table='site';

$link=mysqli_connect($host, $user, $pass, $dbName);
mysqli_query($link, "SET NAMES 'utf8'");

$query="INSERT INTO $table (title, date) VALUES ('now', NOW())";


при таком наборе директив в .htaccess запись в БД добавляется дважды!! объясните, как "протекает процесс"? почему он дважды вызывает test.php?
код не имеет смысла, прост разбираюсь как работает .htaccess.

как мне кажется, я сказал ему бессмыслицу:
RewriteCond говорит, что если это не test.php, то правило ниже не должно выполнятся, а получается, что страница дважды выполняется.

если использовать такой набор:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f
#RewriteCond %{REQUEST_URI} !/test\.php
RewriteRule .* test.php


то работает корректно, хотя, как я понял, должно было замкнуться, ведь адрес не меняется при итерациях внутри .htaccess..
в общем, буду признателен, если распедалите ситацию))
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@dodo512
Основные моменты при составлении правил mod_rewrite хорошо разжёваны в статье https://habr.com/company/sprinthost/blog/129560/

Многие современные браузеры не требуют явного указания <link rel="icon" href="/someimage.ico" />
и сами пытаются найти иконку в корне сайта.
RewriteCond %{REQUEST_URI} !/test\.php
RewriteRule .* test.php

При обращении к /favicon.ico будет вызван test.php.
В этом легко убедиться, добавив в скрипт простейшее логирование.
$log = date('H:i:s ') . $_SERVER['REQUEST_URI'] . PHP_EOL;
file_put_contents('log.txt', $log, FILE_APPEND);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы