У меня небольшая проблема с моими 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, чтобы быть точным). Я извиняюсь за мой плохой английский, это не мой родной язык. Спасибо за помощь заранее!
Ваше регулярное выражение не кажется правильным, попробуйте эти 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]
Показываемый вами 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>';
?>