0

据我了解,创建 htaccess 文件会产生可伸缩性问题,因为每个 Apache 请求都需要查找事物(据我了解,它需要 4 次文件访问)。

因为我确切地知道我的应用程序何时需要查找“retty url” - 有没有办法绕过拥有一个 .httaccess 文件并以某种方式通过我自己的文件访问来查找它?

另外,我可以事先知道漂亮的网址会是什么样子。我怎样才能最顺利地进行掩蔽?

这是一个例子:我为所有树做了一个测试页面:http: //www.comehike.com/outdoors/trees/trees.php

我的应用程序可以知道要创建的漂亮 url。
但我在这里有一个 tree.php 文件:http: //www.comehike.com/outdoors/trees/tree.php? tree_id=24

我怎样才能让它采用 tree_id (用于数据库查找)并且看起来也很像这样: http: //www.comehike.com/outdoors/trees/oak-tree

ps - 我正在使用 php

4

2 回答 2

1

要制作任何漂亮的网址(例如http://www.comehike.com/outdoors/trees/oak-tree),您必须告诉 apache 该网址的哪一部分是您的脚本(没有*.php它,apache 应该如何知道)。“你必须告诉 apache ”意味着你必须改变 apache 的配置——没有办法解决这个问题。你可以通过.htaccess(你提到的性能损失)或其他地方来做到这一点。

可以做的以尽量减少更改 apache 配置的方法是只设置一个主路由器(例如http://www.comehike.com/outdoors)并让它处理它下面的所有路径。

于 2011-02-13T16:43:22.750 回答
0

您不必太在意使用 .htaccess 文件的开销。它不会对您的服务器负载产生太大影响。至于你漂亮的 URL 方案,你可以看看 StackOverflow!注意这个问题的 url 的结构。看起来像:

http://stackoverflow.com/questions/[ID]/[QUESTION]

您可能已经猜到,ID 是 SO 上每个问题的唯一 ID。接下来的问题(您的等价物是树名)只是虚拟文本。尝试更改之后的任何内容/4985258/并重试地址。它仍然会向您发送这个问题。那是因为 SO 使用的 Mod Rewrite 忽略了 id 之后的所有内容。

在您的情况下,我建议使用这样的 URL 结构:

http://www.comehike.com/outdoors/trees/24/oak-tree

使用以下 htaccess mod_rewrite:

RewriteEngine On
RewriteRule ^/outdoors/trees/([0-9]+) /outdoors/trees/tree.php?tree_id=$1

这将匹配其中包含 ID 的任何 URL,并将其发送到 tree.php 脚本。您可以将虚拟标题文本添加到所有链接。


编辑 如果您真的关心 htaccess 文件对性能的影响,您始终可以将所有代码从 htaccess 文件移动到您的 VirtualHost 声明,然后声明AllowOverride None以防止 Apache 搜索 htaccess 文件。您通常可以/etc/apache2/sites-available/default在 Linux 或C:\apache\conf\vhosts.confWindows 中找到您的虚拟主机。

于 2011-02-13T16:38:41.870 回答