HTaccess 404 с mod_rewrite

У меня небольшая проблема с моими URL HTaccess. Я хотел, чтобы мои URL были более дружественными к SEO, мой текущий URL:

url.com/blogitem/2

url.com -> Домен; blog -> blogitem.php; 2 -> идентификатор элемента блога, который нужно получить из БД

Теперь я хотел бы, чтобы URL был таким:

url.com/blogitem/2/name-title-info

Я сделал HTaccess-часть и PHP-часть для нее, но при каждом посещении URL я получу страницу с ошибкой 404.

HTaccess часть:

# Blog SEO Urls.
RewriteRule ^blog/([0-9]*)/?$        blog.php?page=$1    [NC,L]
RewriteRule ^blogitem/([0-9]*)/?$/([a-z]*)/?$    blogitem.php?id=$1&name=$2    [NC,L]

PHP часть:

$trancTitle = trim(strtolower($blogTitle));
$underscoreTitle = preg_replace('/\s+/', '-', $trancTitle);
<a href="blogitem/<?php echo $blogId; ?>/<?php echo $underscoreTitle;?>">

Может кто-нибудь объяснить, почему я получаю страницу с ошибкой взамен (404, чтобы быть точным). Я извиняюсь за мой плохой английский, это не мой родной язык. Спасибо за помощь заранее!

1

Решение

Ваше регулярное выражение не кажется правильным, попробуйте эти 2 правила:

RewriteEngine On
RewriteBase /

# Blog SEO Urls.
RewriteRule ^blog/([0-9]+)/?$ blog.php?page=$1 [NC,L,QSA]
RewriteRule ^blogitem/([0-9]+)/([\w-]+)/?$ blogitem.php?id=$1&name=$2 [QSA,NC,L]
2

Другие решения

Показываемый вами URL не имеет «/» в конце: url.com/blogitem/2/name-title-info
Затем вы упомянули blog.php в своем .htaccess. Я думаю, что вы хотите, чтобы этот URL-адрес тоже url.com/blog/2

Итак, вам нужно немного изменить свое регулярное выражение, попробуйте добавить это в ваш .htaccess:

# Blog SEO Urls.
RewriteRule ^blog/([0-9]+)$ blog.php?page=$1 [L]
RewriteRule ^blogitem/([0-9]+)/([a-z]+)$ /blogitem.php?id=$1&name=$2 [L]

Тогда в вашем php вы получите переменные через метод GET
Попробуйте это, чтобы увидеть, что:

<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>
1

А ты уже прошел курс программирования? Супер скидка!
Прокачать скилл $$$
×