网站深层文件夹结构网址,但所有文件都保存在浅层文件夹中

时间:2015-01-19 11:18:39

标签: url mod-rewrite url-rewriting directory

我正在开发一个小型网络应用程序,输出房产的详细信息(房屋,酒店或其他)。应用程序的URL当前具有查询字符串中的客户端和属性的ID,然后当用户浏览该属性时,修改哈希标记以表示当前正在查看该属性的哪个部分,例如:

www.mydomain/myappfolder/?client=c0123&property=p001234#area=01

但是,我不想再使用查询字符串了,并且想要发布并使用易于阅读和更多SEO友好的网址,以便它们看起来像。

www.mydomain/myappfolder/myclientsname/propertyname/#area=01

然后,应用程序将解析url文件夹路径而不是查询字符串,以输出正确的内容。

我担心的是,当访问这样格式化的URL时,服务器想要在深层文件夹结构的末尾找到一个文件,并且将文件添加到所有这些深层文件夹将使得难以保持文件的维护时间。

所以我的问题是:有没有人知道我可以使用像这样的深层文件夹结构网址的方式,同时仍然将所有应用程序的文件保留在较浅的myappfolder/级别?

我想将网址显示在浏览器和网络统计信息中,因此我希望尽可能避免网页重定向。

如果无法做到这一点,任何人都可以提出我需要在深层文件夹结构末尾放入文件的最小值,以便将更新保持在最低限度。我认为这需要是某种服务器端母版类型系统,并且这需要指回应用程序本身所在的路径。

为了增加复杂性,因为一些客户有自己的子客户端,有些属性有时按位置或项目分类,不同的客户端可能需要具有不同数量的子文件夹级别,所以我们也可以有例如< / p>

www.mydomain/myappfolder/myclientsname/theirclientsname/townname/propertyname/#area=01

此外,我尝试编写代码以使其适用于所有情况,但应用程序可以由客户端自己托管。这意味着他们可以将它放在他们想要的地方并在将来的某个时刻移动它,所以我不知道何时在他们自己的网站文件夹结构中编写应用程序将被放置。< / p>

这两个细节意味着我很难在深层文件夹中的页面上编写代码,这会引用appfolder所在的位置,因为深层文件夹中的页面并不知道它有多深是相对于应用程序,因此很难使用某种../../路径。此外,它不知道appfolder相对于网站根目录的位置,因为客户端可以将appfolder放在任何他们想要的位置。

可以通过让客户端修改位于其网站根目录中的配置文件来完成,但我宁愿避免这种情况,因为将来出现问题会太容易而且我宁愿避免污染客户端的域根。

或者我可以编写解析url的代码,通过检测应用程序的名称来尝试读取appfolder的位置。但是,我们希望appfolder的名称必须是简单的英语和强大的SEO关键字,因此名称可以在客户的名称或项目中重复的风险很小名称,或财产的名称或其他。所以我无法想到一种方法来完全确定url解析器是否掌握了正确的文件夹。

非常感谢您花时间阅读这篇文章,即使您无法提供帮助。

更新1:

好的,所以到目前为止所有的回复都非常有用地建议使用重写规则(我还没有经验),我已经读完了,这似乎是一个很好的前进方式,我接受我&#39 ;我将不得不重写一个查询字符串。所以......

www.mydomain/myappfolder/myclientsname/propertyname/

......在我的情况下会改写为......

www.mydomain/myappfolder/?property=myclientsname/propertyname/

为避免修改域根.htaccess文件,我想将其放在myappfolder /的根目录中。

然而,如上所述,我不知道myappfolder /将位于何处,因此我需要创建一些不会将重写目标定义为静态相对于某个位置的内容。域的根,因为它可能在子文件夹中或更深层次。例如,是否有人写它以便它相对于它找到.htaccess文件的位置?

此外,由于myappfolder /将包含libs / js /等的物理子文件夹,任何人都可以帮助指出我如何避免这些被重写?

1 个答案:

答案 0 :(得分:1)

好的,如果我正确理解这一点,您希望保持网址简短,同时保持文件整齐有序。我建议使用mod-rewrite和数据库。

RewriteRule ^(.*)/(.*)/(.*)/$ /myappfolder/?client=$1&subClient=$2&id=$3 [L]
RewriteRule ^(.*)/(.*)/$ /myappfolder/?client=$1&id=$2 [L]

所以这会采用这样的网址:

/appfolder/JaneDoe/p1234
/appfolder/JaneDoe/JimmyJones/p1234

并将其发送至

/myappfolder/?client=JaneDoe&id=p1234
/myappfolder/?client=JaneDoe&subClient=JimmyJones&id=p1234

我使用不同的名字来缩短时间。

然后,我假设你最后不想要长号,所以为每个主要客户设置一个数据库,为他们和他们的客户设置表。

之后的简单查询

<强>更新

SELECT * FROM 'JaneDoe'.'main' WHERE id='p1234'
SELECT * FROM 'JaneDoe'.'JimmyJones' WHERE id='p1234'

然后这些结果会返回您需要的任何内容,例如深层文件夹的路径。

我还建议您创建一个简单的CMS系统来管理它,这样您就不必担心不同区域或其他任何地方之间的拼写错误。

希望这有助于您入门。

顺便说一句,我认为我的SQL语法已关闭。考虑一下伪代码。

**更新:**

这是Mod_rewrite

的扩展
RewriteRule ^(.*)/(.*)/$ /myappfolder/?client=$1&id=$2 [L]

每个(.*) corresponds to a number, there are two, which is where $ 1 and $ 2`来自。

^表示开始 $表示结束 通过将它们放置在四肢上,它可以防止中间的情况发生。匹配。

[L]表示它是最后一个要处理的规则。您可以考虑使用此[L,NC],以便您的网址不区分大小写。

那么,您将如何根据编辑进行更改?

RewriteRule ^myappfolder/(.*)/(.*)/$ /myappfolder/?property=$1/$2/ [L]

您可以在这里阅读HTACCESS的内容:

http://www.branded3.com/blogs/htaccess-mod_rewrite-ultimate-guide/