加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Apache URL重写不正常

发布时间:2020-12-13 18:18:28 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用apache-rewrite规则来转换以下URL: http://localhost/foo/bar/news.php?id=24 进入这种格式: http://localhost/foo/bar/news/foo-bar 数字24是MySQL表中随机行的id,其中还包含标题和内容字段. MariaDB [blog] select * from articles;+----+
我正在尝试使用apache-rewrite规则来转换以下URL:

http://localhost/foo/bar/news.php?id=24

进入这种格式:

http://localhost/foo/bar/news/foo-bar

数字24是MySQL表中随机行的id,其中还包含标题和内容字段.

MariaDB [blog]> select * from articles;
+----+---------+----------+ 
| id | title   | content  |
+----+---------+----------+ 
|  1 | foo-bar | bla bla  | 
+----+---------+----------+ 
1 row in set (0.00 sec)

我的.htaccess中有以下规则:

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

我也有一个PHP代码生成这样的链接:

$link = "<a href='news.php?id={$row['id']}'></a>";
echo $link;

但是,我无法获得重写规则来将路径更改为所需的最终结果.

首先,您需要更改html中的href,以提供新的url格式
function news_preview() {
$query = "SELECT * FROM news ORDER BY id DESC LIMIT 5  ";
$result = mysql_query($query) or die(mysql_error());
while($row=mysql_fetch_array($result)) 
{   
  echo "<a href="/news/$row[id]">  ". substr($row['title'],26)."...</a><br/>".; }
}

将生成像http:// localhost / news / 24这样的URL

请注意,我从网址中删除了/ DIRECTORY / AID,因为htaccess建议你想要它是url,而不是你在文中所说的.

但现在转到http:// localhost / news / this_is_article_title类型的url.因为this_is_article_title和id 24之间没有相关性,所以实现这一点的唯一方法是将id添加到url中,或者让php在数据库中查找带有此标题的新闻文章.

然而,最后一个解决方案存在一些问题,因为您不能仅仅使用网址中的标题.你必须逃避角色.此外,您还必须为数据库中的标题行添加索引,以获得更好的性能.

所以我会选择第一个解决方案.我们将生成这样的网址

HTTP://本地主机/新闻/ 24 / this_is_article_title

首先是php部分

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

接下来是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]

我认为应该这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读