php - Apache URL 重写功能不正常

标签 php apache .htaccess url-rewriting

我正在尝试使用 apache-rewrite 规则来转换以下 URL:

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

转换成这种格式:

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

24 是 MySQL 表中随机行的 id,它还包含 titlecontent字段。

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/

相关文章:

apache - Slim(PHP)RESTful API的Apache重写规则

.htaccess - 除一个目录外,将 http 重定向到 https

php - 加密密码 FOSUserBundle

php - 在 PHP 中为巴基斯坦设置时区

apache - Docker容器不再允许Web访问

apache - 删除 WWW-Authenticate header

php - 如何强制重新缓存更新的网页

php - oop php 数据库访问的最佳实践是什么?

php - 具有权限的 URI 的路径必须以斜杠 "/"开头或为空。 DigitalOcean Spaces AWS S3 SDK PHP

php - 带有 Xampp 错误的符号链接(symbolic link)