我正在尝试使用 apache-rewrite 规则来转换以下 URL:
http://localhost/foo/bar/news.php?id=24
转换成这种格式:
http://localhost/foo/bar/news/foo-bar
24
是 MySQL 表中随机行的 id
,它还包含 title
和 content
字段。
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;
但是,我无法获得重写规则以将路径更改为所需的最终结果。
最佳答案
替换(真实)URL 有一个数字 -Code- 来标识链接(根据您的描述):http://localhost/DIRECTORY/AID/news.php?news=42
在本例中该代码是 42,但您要显示的 URL 没有它。如果没有这个数字,我们将始终收到错误 404。就像只输入:http://localhost/DIRECTORY/AID/news.php?news=
必须修改您想要显示的网址,例如在“/”之后添加代码。可以是连字符等,但必须相应地修改正则表达式。
这是一个示例,输入:http://localhost/news/42/ 转到 http://localhost/DIRECTORY/AID/news.php?news=42:
RewriteEngine On
RewriteRule ^news/([0-9]+)/?$ DIRECTORY/AID/news.php?news=$1 [NC,L]
这就是您所需要的。要测试此示例,请将此唯一代码插入 http://localhost/DIRECTORY/AID/
的 news.php<?php
if ( $_GET[ 'news' ] == '42' ) {
echo "HERE I AM<br /><br />";
}
?>
根据 OP 描述更新。可以使用任何名称代替 This_is_news:
RewriteEngine On
RewriteRule ^news/([0-9a-zA-Z-_]+)/?$ DIRECTORY/AID/news.php?news=$1 [NC,L]
关于php - Apache URL 重写功能不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557696/