【问题标题】:URL prettification with arbitrary number of "subdirectories"具有任意数量的“子目录”的 URL 美化
【发布时间】:2011-06-03 17:21:24
【问题描述】:

我正在开发我的第一个基于 PHP/Apache 堆栈的网站。

我的网站有一个结构如下的逻辑菜单:

+AAA Entry
  -AAB Entry
    -AABA Subentry
    -AABB Subentry
  -AAC Entry
    -AACA Subentry
      -AACAA Subentry
      -AACAB Subentry
    -AACB Subentry
  -AAD Entry

+BBB Entry
  -BBC Entry
    -BBCA Subentry
    etc.
+CCC Entry
+DDD Entry

我的目标是拥有像这样的有效网址:

http://www.mydomain.com/aaa/aab/aaba
http://www.mydomain.com/aaa/aac/aaca/aacaa
http://www.mydomain.com/aaa/aac/aacb
http://www.mydomain.com/aaa/aad

http://www.mydomain.com/bbb
http://www.mydomain.com/bbb/bbc
http://www.mydomain.com/bbb/bbc/bbca

http://www.mydomain.com/ccc

我读过mod_rewriteRewriteRuleRewriteCond,但我不确定在可维护性方面使用哪种方法。例如,如果我决定向AACAA 添加另一个级别怎么办?我是否必须一遍又一遍地惹mod_rewrite

将所有内容重定向到index.php 并手动解析REQUEST_URI 是否更合适? 专业人士是如何做到的?

【问题讨论】:

  • 这是“由专业人员完成的”,使用 PHP framework。除了作为教育练习之外,您不应该自己滚动。
  • 是的,我正在尝试编写自己的 CMS,以期学习 PHP 和一般的 Web 编码。这永远不会在生产环境中。 :)

标签: php apache mod-rewrite hierarchy friendly-url


【解决方案1】:

将所有 URL 转发到控制器脚本并在 PHP 中进行路由要容易得多:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* my_script.php [L]

通过my_script.php 引导对不存在的文件的所有请求。从那里,您可以检查请求 URI,将其分解为由正斜杠分隔的段,然后路由到正确的文件。

【讨论】:

  • 这是我想了一会儿后想到的唯一解决方案。我会等待更多回复,但在将其标记为已回答之前。谢谢!
  • +1。 -d-l 没有额外的 RewriteCond 有什么原因吗?
  • @gore -l 是多余的(-f 涵盖符号链接),我从不想提供目录内容,所以没有 -d
猜你喜欢
  • 2013-01-01
  • 2013-01-10
  • 2020-04-21
  • 2011-01-25
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多