同一个 .htaccess 中有两个不同的重写条件?

同一个 .htaccess 中有两个不同的重写条件?

我需要根据 URL 中请求的路径为两个特定文件创建重写条件。可以吗?

条件 1:如果 URL 是example.com/admingo to admin.php?uri=params。即:

  • example.com/admin/form=>admin.php?uri=form

  • example.com/admin/form/edit=>admin.php?uri=form/edit

ETC...

条件2:如果 URL 需要任何其他参数(除 之外/admin),转到index.php?uri=params。因此:

  • example.com/about=>index.php?uri=about

  • example.com/test=>index.php?uri=test

  • example.com/blau/bleu=>index.php?uri=blau/bleu

ETC...

答案1

尝试这样的操作:

DirectoryIndex index.php

Options -MultiViews

RewriteEngine On

RewriteRule ^admin(?:$|/([^.]*))$ admin.php?uri=$1 [QSA,L]

RewriteRule ^([^.]+)$ index.php?uri=$1 [QSA,L]

这确实假设您的 URL(需要重写)均不包含点(.)。这样就无需进行文件系统检查以确保请求不会映射到静态资源,该资源通常包含文件扩展名(以点分隔)。

MultiViews需要禁用(如果尚未禁用),因为您请求的 URL/admin是您要重写到的文件的基本名称。如果启用了 MultiViews,则/admin.php调用时无需 URL 参数。

仅当您在原始请求中期待查询字符串时才需要(查询字符串附加)标志QSA,该​​查询字符串需要附加到重写的 URL。

对文档根目录(主页)的请求将调用index.php 没有参数uri


在旁边:仅关于术语的说明...

如果 URL 包含任何其他参数(除 之外/admin

这里所说的“参数”实际上是 URL 路径(或路径段)。URL参数是查询字符串中的名称=值对(您想要将请求重写为的内容)。

在您的示例中,您正在将 URL 路径重写为 URL 参数值。

相关内容