Php 试图编写一个mod重写,使我的动态url用户友好,但不起作用

Php 试图编写一个mod重写,使我的动态url用户友好,但不起作用,php,apache,.htaccess,mod-rewrite,url-rewriting,Php,Apache,.htaccess,Mod Rewrite,Url Rewriting,我有一个新闻页面,它向一个细节页面提供一个id,该id反过来使用收到的id查询该数据库以获得结果。我正在尝试创建正常的url,例如: xyz.com/news-detail.php?nrf=23 更友好的方式,如: xyz.com/news/the-title-of-the-news/ 在我的新闻页面上,指向新闻文章的链接如下: <a href="news-detail.php?nrf=<?php echo $row_news['ntitle']; ?>"><?

我有一个新闻页面,它向一个细节页面提供一个id,该id反过来使用收到的id查询该数据库以获得结果。我正在尝试创建正常的url,例如:

xyz.com/news-detail.php?nrf=23
更友好的方式,如:

xyz.com/news/the-title-of-the-news/
在我的新闻页面上,指向新闻文章的链接如下:

<a href="news-detail.php?nrf=<?php echo $row_news['ntitle']; ?>"><?php echo $row_news['ntitle']; ?></a>
我想应该是根据标题从数据库中获取记录的。 问题是,它不起作用

xyz.com/news-detail.php?nrf=the%20title%20of%20the%20news
我对mod rewrite还很陌生,但我正在努力改进我的动态链接,使之更友好。我读过很多关于mod rewrite的文章,这就是我试图做到的。 我在.htaccess文件中的重写规则是:

RewriteEngine On
RewriteRule ^news/([a-zA-Z0-9\\.\\_\\-]+)/?$ news-detail.php?nrf=$2 [NC,L]
我也试过这个,但也不起作用

RewriteEngine On
RewriteRule ^news/([\w-]+)/$    /news-detail.php?nrf=$1 [NC,L]

如果您能帮忙改正和解释,我们将不胜感激

您对查询非常开放,应该真正使用而不是连接查询。特别是因为你根本没有逃避用户的输入!您得到的原因是:
20%20新闻的%20标题%20
是因为您正在url中打印空格。url中的空格将被编码为
%20
。您应该做的是创建另一个名为“slug”的列,在该列中“slugify”标题(用破折号替换空格等,有用于此的库),并在数据库中搜索记录时使用该值。这是最常用的方法。@MagnusEriksson好吧,对于向数据库输入数据的表单,我使用的是预处理语句。因为没有用户输入,所以我使用它。但这是可以修改的。至于标题的排版,我可以做到。但我感兴趣的是重写代码是否正确完成。因为我希望有类似于
xyz.com/new/the title of the news/
的东西,但我仍然得到了
news detail.php?nrf=
这不应该是。您使用的URL是什么?重写代码只需获取url
/news/something
,并在内部将其发送到url
new detail.php?nrf=$1
。如果后者是用户使用的链接,则用户将看到该链接。没有真正了解问题。您正在将
$\u GET
参数直接放入查询中<代码>$\u GET-参数是用户输入。因此,您对sql注入非常开放。如果你已经在其他地方使用准备好的语句,那么在任何地方都可以使用它。
RewriteEngine On
RewriteRule ^news/([\w-]+)/$    /news-detail.php?nrf=$1 [NC,L]