【问题标题】:Retrieving GET[] information, from URL forwarding using htaccess使用 htaccess 从 URL 转发中检索 GET[] 信息
【发布时间】:2023-03-04 13:34:01
【问题描述】:

我的localhost/DIRECTORY/AID/ 中有一个index.phpnews.php.htaccess 文件 文件夹,我基本上是在尝试从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 错误

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

【问题讨论】:

标签: php apache url-rewriting get


【解决方案1】:

把这段代码放在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]

【讨论】:

  • 仍然找不到对象错误。 news.php 应该是空的吗?
  • 我编辑了我的答案,上面将转到htdocs/.htaccess(删除之前的.htaccess)。但是你必须让http://localhost/DIRECTORY/AID/news.php?id=46 工作或者告诉我你是如何加载你的news.php URL 的?
  • 嗯,这是有希望的。我按照你的要求做了,当我点击链接时我没有收到任何错误,但只有一个空白页面。网址已更改为http://localhost/news/46/Third_news_test,这很好,没有错误。但是,还是什么都没有。我很困惑,我在 index.php 中有脚本,但我需要在 news.php 中显示新闻,那么在 news.php 中究竟需要什么?
  • 我花了两周时间和两个帖子 (stackoverflow.com/questions/13557696/…) 解决了这个问题。最后,它完成了。感谢上帝。我现在明白了。这完全是由于将 .htaccess 文件放在错误的文件夹中。感谢一百万阿努巴瓦
  • 感谢您的接受。以上 .htaccess 将直接进入您服务器的$DOCUMENT_ROOT(可能是 htdocs 目录)下。
【解决方案2】:

在 AID/ 文件夹中以及 index.phpnews.php 问题是我不知道如何从 news.php 中的 url 获取数据

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]

【讨论】:

  • 我更改了代码,但没有。这是目录列表的屏幕截图。我认为,这可能是这里的问题是链接imm.io/OFXF
  • 我只需要知道,如何从新闻页面中的url获取数据?
  • @Eritrea htaccess 文件需要在您的文档根目录中。
  • 感谢您的努力。问题解决了。我已将 .htaccess 文件与索引文件放在一起
【解决方案3】:

听起来您希望能够将 URL 的最后部分读取为 $_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]

【讨论】:

  • 好的,值得一试。我想也许你的系统正试图根据标题和 id 找到它
  • 感谢您的努力,+10
猜你喜欢
  • 2011-03-26
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多