【发布时间】:2015-01-19 11:18:39
【问题描述】:
我正在开发一个小型网络应用程序,用于输出属性(房屋、酒店或其他)的详细信息。应用程序的 url 当前在查询字符串中具有客户端和属性的 id,然后当用户浏览属性时,会修改哈希标记以表示当前正在查看属性的哪个部分,例如:
www.mydomain/myappfolder/?client=c0123&property=p001234#area=01
但是,我不想再使用查询字符串了,我想放弃并使用易于阅读和对 SEO 更友好的网址,让它们看起来像例如
www.mydomain/myappfolder/myclientsname/propertyname/#area=01
然后应用程序将解析 url 文件夹路径而不是查询字符串以输出正确的内容。
我担心的是,当访问这样格式的 url 时,服务器希望在深层文件夹结构的末尾找到一个文件,并且将文件添加到所有这些深层文件夹会使文件难以保持时间。
所以我的问题是:有谁知道我可以使用这样的深层文件夹结构 url,同时仍将所有应用程序的文件本身保持在较浅的 myappfolder/ 级别?
我想保持 url 在浏览器和我的网络统计中显示,所以我想尽可能避免页面重定向。
如果无法做到这一点,任何人都可以提出我需要在深层文件夹结构末尾放置一个文件的最低要求,以便将更新保持在最低限度。我认为这需要某种服务器端母版页类型系统,并且需要指向应用程序本身所在的路径。
为了增加复杂性,因为一些客户端有自己的子客户端,并且某些属性有时按位置或按项目分类,不同的客户端可能需要具有不同数量的子文件夹级别,因此我们也可以有例如
www.mydomain/myappfolder/myclientsname/theirclientsname/townname/propertyname/#area=01
另外,我正在尝试编写代码以使其适用于所有情况,但该应用程序可以由客户自己托管。这意味着他们可以把它放在他们想要的地方,并在未来的某个时间移动它,所以我不知道在编写代码时应用程序将被放置在他们自己网站的文件夹结构中的什么位置。
这两个细节意味着我很难将代码写在 deep 文件夹中的页面上,该页面指向 appfolder 所在的位置,因为 deep 文件夹中的页面不知道它的相对深度到应用程序,所以很难使用某种../../ 路径。此外,它不知道 appfolder 相对于网站根目录的位置,因为客户端可以将 appfolder 放在他们想要的任何位置。
这可以通过让客户修改位于其站点根目录中的配置文件来完成,但我宁愿避免这样做,因为将来很容易出错,并且我宁愿避免污染客户端的域根。
或者我可以编写解析 url 的代码,以尝试通过检测应用程序的名称来读取应用程序文件夹的位置。但是,我们希望 appfolder 的名称必须是简单的英文和强大的 SEO 关键字,因此该名称可能与客户名称或其项目名称或属性名称或其他名称重复的风险很小。所以我想不出一种方法来完全确定 url 解析器已经掌握了正确的文件夹。
非常感谢您抽出宝贵时间阅读本文,即使您无能为力。
更新 1:
好的,到目前为止,所有回复都非常有帮助地建议使用重写规则(我还没有经验),我已经阅读过,这似乎是一个很好的前进方式,我接受我将必须重写为查询字符串。所以...
www.mydomain/myappfolder/myclientsname/propertyname/
...在我的情况下将被重写为...
www.mydomain/myappfolder/?property=myclientsname/propertyname/
为了避免修改域根 .htaccess 文件,我想将它放在 myappfolder/ 的根目录中。
但是,如上所述,我不知道 myappfolder/ 将位于何处,因此我需要创建一些不会将重写目标定义为静态相对于域根目录的位置的东西,因为它可能位于子文件夹或更深的文件夹中。例如,有没有办法将它写成相对于找到 .htaccess 文件的位置?
另外,由于 myappfolder/ 将包含 libs/ js/ 等的物理子文件夹,任何人都可以帮助说明如何避免这些被重写?
【问题讨论】:
-
我认为这通常是在服务器上使用重写规则来完成的。
-
您可以使用 URL 重写将 URL(现有或其他)映射到物理文件。
标签: url mod-rewrite url-rewriting directory