RewriteRule ссылки на файлы

BorisK

Новичок

1. Файлы css/... не подгружаются. Все в корневой директории. Если view-source сохранить и открыть без rewrite - пути правильные. XAMPP. Не могу понять, в чем проблема.

2. Что скажете о такой маршрутизации? Сайт небольшой, знаю, что есть куча готовых решений, но они тянут ненужный функционал, оставить нужное - не хватает знаний.

.htaccess:

RewriteEngine On
RewriteRule ^(.+)$ router.php?url=$1 [QSA]

router.php:
$url_input = preg_replace('/\..+$/', '', $_GET['url']);

if ($url_input == 'index') {
require 'index.php';
...
} else {
$select_sql = "SELECT url FROM pages";
$result = mysql_query($select_sql);
$row = mysql_fetch_array($result);

do {
if (preg_match("/^$url_input$/", $row['url'], $match)) {
$url_now = $match[0];

require_once 'page.php';
}
} while($row = mysql_fetch_array($result));
}
?>

page.php:
<head>
<?php
$select_sql = "SELECT * FROM pages WHERE url = '$url_now'";
...
echo ' <link rel="stylesheet" href="'."$value".'" type="text/css" media="screen">';

view-source:
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen">

Прошу прощения, если вопрос нубский, только учусь%)
 

AnrDaemon

Продвинутый новичок
У меня только один вопрос - какое это всё имеет отношение к "программированию на PHP" ?
 

fixxxer

К.О.
Партнер клуба
Обнаружен Попов с вероятностью 0.67. (sprintf не хватает)
 

BorisK

Новичок
Спасибо за конструктивные ответы.
Анализатор вероятностей у Вас так себе. Гугл обьяснил, кто такой Попов и что его не любят, но почему - нет.
 

fixxxer

К.О.
Партнер клуба
1) либо отключи в папке css реврайты, либо добавь исключение для существующих файлов. Классическая реврайт-конструкция, я апачом не пользуюсь уже лет 10, но она гуглится влет, по какому-нибудь запросу вида apache rewrite if file does not exist
2) пиши пути к css от корня: /css/...
 

fixxxer

К.О.
Партнер клуба
А вообще у тебя какая-то ерунда написана. Ты перебираешь всю таблицу, при этом зачем-то используешь preg_match (что будет, если в $url_input будет слеш или кусок регулярки?

По идее, тебе достаточно одного запроса:
SELECT * FROM pages WHERE url = :url
['url' => $url_input]

mysql_-функции устарели 5 лет назад и начиная с PHP7 их вообще нет, используй PDO.

PHP:
$select_sql = "SELECT * FROM pages WHERE url = '$url_now'";
А вот тут ты еще раз селектишь то, что уже выбрал ранее своим полным перебором. Достаточно использовать результат первого запроса.
 

BorisK

Новичок
А вообще у тебя какая-то ерунда написана.
Вроде переделал, работает. Если не сложно, подскажите, чего не хватает?

.htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ router.php?url=$1 [QSA]​

router.php:
preg_match("/[a-z-]+\.php/", $_GET['url'], $match); //чтобы не было лишнего в url

if (!empty($match[0])) {
$url_input = preg_replace('/\..+$/', '', $match[0]); //раньше сайт был из статических .php, отрезаю расширение, поскольку в таблицах без него​

$stmt = $pdo->prepare('SELECT * FROM regular_pages WHERE url = ?');
$stmt->execute([$url_input]);
$row = $stmt->fetch(PDO::FETCH_LAZY);

if (!empty($row['url'])) {
$url_now = $row['url'];
require_once 'regular_page.php';​
} else {
$stmt = $pdo->prepare('SELECT * FROM article_pages WHERE url = ?');
$stmt->execute([$url_input]);
$row = $stmt->fetch(PDO::FETCH_LAZY);

if (!empty($row['url'])) {
$url_now = $row['url'];
require_once 'article_page.php';​
} else {
echo '404';​
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
ты серьезно ждешь, что за тебя отладят твой код?

хм, а зачем вообще FETCH_LAZY?
 

BorisK

Новичок
хм, а зачем вообще FETCH_LAZY?
Для бессмысленной и беспощадной попытки сэкономить память (советуют в phpfaq).
Не жду, но всегда есть шанс, что кто-то напишет что-то полезное. А если нет, то нет)
 
Последнее редактирование:
Сверху