在路由器框架中htaccess文件是否绝对必要?

时间:2011-02-13 16:16:35

标签: php url url-routing router

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

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

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

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

我的应用程序可以知道要创建的漂亮网址 但我这里有一个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

2 个答案:

答案 0 :(得分:1)

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

可以做什么来最小化更改apache配置是为了设置一个主路由器(例如http://www.comehike.com/outdoors)并让它处理它下面的所有路径。

答案 1 :(得分:0)

您不应该太担心使用.htaccess文件的开销。它对您的服务器负载没有太大影响。 至于你漂亮的URL方案,你可以看看StackOverflow!注意这个问题的网址结构。它看起来像:

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

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

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

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文件。您通常可以在Linux中的/etc/apache2/sites-available/default或Windows中的C:\apache\conf\vhosts.conf中找到您的虚拟主机。