我需要根据 URL 中请求的路径为两个特定文件创建重写条件。可以吗?
条件 1:如果 URL 是example.com/admin
go 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 参数值。