【问题标题】:Cleaning up nested mod_rewrite statements清理嵌套的 mod_rewrite 语句
【发布时间】:2010-02-08 01:08:54
【问题描述】:

我正在清理一个包含大量 mod_rewrite 语句的大型 .htaccess 文件。

混乱的最大部分来自于捕获各种事件的语句

/directory1
/directory1/directory2
/directory1/directory2/directory3

使用像

这样的语句
RewriteCond  %{REQUEST_URI} ^/([^/]+)/([^/]+)$   
RewriteRule .* /front.php?level1=%1&level2=%2&%{QUERY_STRING} [L]

RewriteCond  %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)$   
RewriteRule .* /front.php?level1=%1&level2=%2&level3=%3&%{QUERY_STRING} [L]

熟悉 mod_rewrite 的人能否给我一个指针,告诉我如何编写一个通用语句,该语句将捕获任何深度的 directory1/directory2... 并将适当的 level 变量放入 RewriteRule?

【问题讨论】:

  • 这个问题属于serverfault。
  • 呐,来吧。 SO上有大量与mod_rewrite相关的问题。
  • 服务器故障上线之前还是之后?
  • 属于 Serverfault。有些人还没醒,但 Mod_Rewrite 实际上属于 Serverfault。
  • 我们正在 SO 上讨论 truckload 提出的各种 HTML 问题,其中很多真的属于 Doctype。使用 mod_rewrite 通常是为动态网站优化或构建合理 URL 结构的一部分。这与编程有何关系?

标签: apache .htaccess mod-rewrite


【解决方案1】:

宁可使用以下重写规则

RewriteRule ^(.*)$ front.php/$1 [L]

并通过front.php中的路径信息访问文件夹:

$pathinfo = $_SERVER['PATH_INFO'];

您也可以在 Apache 中启用 MultiViews 并将其配置为使用 front.php 作为索引文件,并以相同的方式获取路径信息。

【讨论】:

  • 好主意,而且性能方面没有问题,因为被此捕获的内容无论如何都会通过 PHP 脚本运行。这将是一个构建为在尽可能多的平台上运行的应用程序,所以我不想依赖 MultiViews。我现在使用的是RewriteRule ^dirname/(.*)$ dirname/index.php?request=$1%{QUERY_STRING} [L] Cheers!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2014-04-04
  • 2011-09-25
  • 1970-01-01
  • 2012-06-01
  • 2013-10-13
  • 1970-01-01
相关资源
最近更新 更多