使用htaccess从URL转发中检索GET []信息

时间:2012-12-10 19:44:51

标签: php apache url-rewriting get

我的index.php中有news.php.htaccess以及localhost/DIRECTORY/AID/个文件 文件夹,我基本上尝试从index.php发送/接收数据到news.php

这是index.php内部的一个函数,它创建了一个来自数据库查询的链接,并回显了一篇文章的标题。

function news_preview() {
    $query = "SELECT * FROM updates ORDER BY update_id DESC LIMIT 5  ";
    $result = mysql_query($query) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {
        $url = "/news/$row[update_id]/" . preg_replace('/[^a-zA-Z0-9-_]/', '_',
            $row['update_title']);
        echo "<a href=\"$url\">  " . substr($row['update_title'], 0, 26) . "...</a><br/>";
    }
}

echo news_preview();

现在,这是.htaccess的样子

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^news/([0-9]+)/([A-Za-z0-9_-]+)$ DIRECTORY/AID/news.php?id=$1 [QSA,L]

现在,问题。基本上,当我点击链接时(由news_preview()生成) index.php中显示的内容,我在 news.php 页面中的所有内容都没有。但是,可能是因为我试图使用$_GET['title']虽然,我不确定这是否是我们检索数据的方式。但是,链接将我带到http://localhost/news/46/This_is_news_title 这是完美的,但我收到Object Not Found错误

下面是我得到的错误的图像。

enter image description here

3 个答案:

答案 0 :(得分:4)

将此代码放入htdocs/.htaccess

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteBase /

RewriteRule ^news/([0-9]+)/.*$ /DIRECTORY/AID/news.php?id=$1 [QSA,L,NC]

答案 1 :(得分:1)

  

在AID /文件夹中以及index.php&amp; news.php问题在于,我不知道如何从news.php

中的网址获取数据

htaccess文件需要位于文档根目录中。当请求URI的格式为:

/news/1234/something-something

apache用于解决是否应该应用覆盖(即htaccess文件中的内容)的命令首先要查看这是否是目录/news/1234/something-something,如果是,那么是否有htaccess文件。这不是一个目录,所以apache继续前进。如果/news/1234是一个目录,如果是,请查看其中是否有htaccess文件;既然没有,没有任何反应。然后apache检查/news是否是目录,如果是,请检查htaccess;它也不是一个目录,所以没有任何反应。最后,apache检查文档根/以查看是否存在htaccess。由于文档根 是一个目录,您需要在其中放置规则。

/DIRECTORY/AID/目录永远不会出现在这里,除非它实际上是你的文档根目录。如果DIRECTORY/AID/是您的文档根目录,例如URI /直接映射到该目录,然后您需要将规则更改为:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^news/([0-9]+)/([A-Za-z0-9_-]+)$ news.php?id=$1 [QSA,L]

答案 2 :(得分:1)

听起来您希望能够以$_GET['title']的形式读取网址的最后一部分,但您的htaccess规则并未将其添加到查询字符串中。

尝试更改

RewriteRule ^news/([0-9]+)/([A-Za-z0-9_-]+)$ DIRECTORY/AID/news.php?id=$1 [QSA,L]

RewriteRule ^news/([0-9]+)/([A-Za-z0-9_-]+)$ DIRECTORY/AID/news.php?id=$1&title=$2 [QSA,L]