HTaccess 404与mod_rewrite

时间:2014-09-14 17:18:00

标签: php apache .htaccess url mod-rewrite

我的HTaccess网址存在一个小问题。我想让我的网址更加友好,我目前的网址是:

  

url.com/blogitem/2

url.com - >领域;博客 - > blogitem.php; 2 - >从DB获取博客项目的ID

现在我希望网址如下:

  

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 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

您显示的网址末尾没有“/”:url.com/blogitem/2/name-title-info 然后你在你的.htaccess中提到了blog.php我想你也想要这个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>';
?>