【问题标题】:.htaccess rule for recursive subfolder links.htaccess 递归子文件夹链接规则
【发布时间】:2019-10-28 02:58:26
【问题描述】:

我想为许多子文件夹 url 设置一个或几个规则。我不想在规则中写入 -blog- 或 -shop- 之类的词。

  1. https://www.example.com/en/
  2. https://www.example.com/en
  3. https://www.example.com/en/blog/
  4. https://www.example.com/de/shop
  5. https://www.example.com/en/shop/keyboard
  6. https://www.example.com/de/shop/cpu/amd5/

我想要这样的输出:

print_r($_GET) 输出:

  1. Array ( [lang] => en )
  2. Array ( [lang] => en )
  3. Array ( [lang] => en [seo1] => blog )
  4. Array ( [lang] => de [seo1] => shop )
  5. Array ( [lang] => en [seo1] => shop [seo2] => keyboard )
  6. Array ( [lang] => en [seo1] => shop [seo2] => cpu [seo3] => amd5 )

【问题讨论】:

    标签: .htaccess recursion url-rewriting seo subdirectory


    【解决方案1】:

    这将是一种简单的方法,也允许异常和以后的灵活性:

    RewriteEngine on
    RequestCond %{REQUEST_URI} !/router\.php
    RewriteRule ^/?([^/]+)/?$ /router.php?lang=$1 [END]
    RewriteRule ^/?([^/]+)/([^/]+)/?$ /router.php?lang=$1&seo1=$2 [END]
    RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/?$ /router.php?lang=$1&seo1=$2&seo2=$3 [END]
    RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /router.php?lang=$1&seo1=$2&seo2=$3&seo3=$4 [END]
    

    这里/router.php 只是一个示例,您需要使用您在内部实现的任何逻辑。

    如果您使用上述规则收到内部服务器错误(http 状态 500),那么您很可能操作的是非常旧版本的 apache http 服务器。在这种情况下,您将在 http 服务器错误日志文件中看到不支持的 [END] 标志的明确提示。您可以尝试升级或使用旧的[L] 标志,在这种情况下它可能会起作用,尽管这取决于您的设置。

    此规则同样适用于 http 服务器主机配置或动态配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用动态配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

    一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 2012-08-20
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多