php - 使用 rewritemap 和 mysql 重写 url 参数

标签 php mysql .htaccess mod-rewrite rewritemap

我知道这个问题已经被很多人打死了,但是大多数答案似乎都是针对一个非常具体的案例,只适合他们的需要,到目前为止我还没有找到合适的解决方案(至少,据我所知)。

我的问题是我试图让我的网站将 URL 参数从 ID 重定向到实际字符串。

例如:

www.example.com/?category=1

将显示为:

www.example.com/software

同时

www.example.com/?category=2

将显示为:

www.example.com/software/desktop

从我读到的内容来看,我应该正在研究 apache 重写映射,这就是我的困惑所在。我真的不想从平面 txt 文件加载,因为我'我想让它尽可能地动态化,而且我读到我可以让它从 php 文件中读取并从 MySQL 数据库中读取,这正是我想要的。

问题在于我真的不太确定实现这一目标的正确方法是什么。 RewriteMap文档仅在一定程度上涵盖了平面 .txt 文件,并没有用 MySQL 实现。

所以基本上我要问的是,是否有人可以解释如何实现我正在寻找的目标,或者至少为我指明正确的方向。遗憾的是,到目前为止,我发现的大多数线程都没有太大帮助,但我可能已经忽略了有用的线程。

如果有帮助,现在,我的 MySQL 数据被格式化为继承结构,如下所示:

 ID |   Title          |   Link             | Parent
  1 | Software         | /Software/         |  NULL
  2 | Desktop Software | /Software/Desktop/ |   1
  2 | Mobile Software  | /Software/Mobile/  |   2

附言: 我应该补充一点,我发现的大多数解决方案都以此为例:

  RewriteMap examplemap prg:/path/to/file.php
  RewriteRule (.*) ${examplemap:$1}

但它从不提供有关 file.php 中的内容以及它如何查询和返回值的信息。

编辑 我应该提到我在共享托管服务器上,而不是我自己的私有(private)服务器上,因此我可能无法访问所有可能的选项

编辑 2 只是为了清楚起见: 我想做的是让访问“example.com/software”的用户被视为在“example.com/?category=1”上;基本上美化链接并使其更具可读性。唯一的问题是,我正在尝试从数据库中读取它

最佳答案

如果您无权访问服务器或虚拟主机配置,则无论如何都无法使用 RewriteMap。 map 本身需要在服务器或虚拟主机配置中定义,而不是在 htaccess 文件中。但是 apache 2.4 可以选择使用 mod_dbd 来使用 SQL query to define a rewrite map .

如果您需要访问 MySQL,最好在 PHP 中完成所有这些操作,而不是使用 mod_rewrite。您将使用 mod_rewrite 路由到您的 php 文件,然后该文件将重定向。也许是这样的?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /file.php?link=$1 [L]

所以当有人请求 http://example.com/Software/Mobile/ 时,请求被重写为:/file.php?link=Software/Mobile/,您的 file.php 脚本将进行查找。

或者如果你的意思正好相反:

RewriteCond %{QUERY_STRING} category=([0-9]+)
RewriteRule ^$ /file.php?ID=%1 [L]

所以当有人请求 http://example.com/?category=2 时,请求被重写为:/file.php?ID=2 并且php 脚本执行查找。

关于php - 使用 rewritemap 和 mysql 重写 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757497/

相关文章:

php - 这个 PHP 库中的 '\' 是什么意思?

.htaccess - 在子目录中使用 .htaccess 重定向 url

apache - Laravel 总是返回 404

php - 在 PHP 上美化存储在字符串中的 HTML

php - 如何从 Controller 获取两个对象结果以在 Laravel5 中查看

PHP 从 id 更新 mysql 数据库表

mysql - CASE WHEN THEN 其他表中的最小值

mysql - 从文件或本地表获取 SQL QUERY 的 WHERE IN 过滤器的输入列表

Mysql SELECT 不工作

php - 在 justhost 帐户上使用 cakephp 的 htaccess 500 错误