使用 .htaccess 重定向到动态相对路径?

Har*_*nen 5 regex .htaccess redirect

是否可以使 .htaccess “理解”动态相对路径并正确重定向到它们?

我的设置如下:

http://domain.com/htroot/aaa/xyz
http://domain.com/htroot/bbb/xyz
http://domain.com/htroot/ccc/xyz
Run Code Online (Sandbox Code Playgroud)

等等。就示例而言,“htroot”包含我需要修改的 .htaccess。以下子级别(aaa、bbb、ccc)可以是任何 a-z0-9 名称,并且文件夹具有 index.php(或要重定向到的任何其他 .php)。本xyz应工作作为排序的参数,请参阅下一部分。这xyz部分在文件系统上没有任何地方作为“物理”文件夹或文件。

我需要实现的是以下内容:当您使用 url 访问时

http://domain.com/htroot/aaa/xyz
Run Code Online (Sandbox Code Playgroud)

它从

http://domain.com/htroot/aaa/ (or http://domain.com/htroot/aaa/index.php, either way)
Run Code Online (Sandbox Code Playgroud)

index.php 开始的地方 -> 我可以xyz从 REQUEST_URI获取解析并处理它以提供它指定的正确内容,而页面的 URL 保持为http://domain.com/htroot/aaa/xyz自然。

到目前为止,如果每个子级别(aaa 等)都有自己的 .htaccess,我已经设法解决了这个问题,但我需要一个只有一个 .htaccesshtroot来处理这个的。我猜它可能与 .htaccess 中的 $0 参数有关,但不确定。

Fab*_*geb 4

您可能想要执行如下操作:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ /htroot/$1/index.php?data=$2 [L]
Run Code Online (Sandbox Code Playgroud)

如果第一个通配符匹配(.*)aaa并且第二个通配符匹配(.*)xyz(htroot/aaa/xyz) 它将从以下位置获取内容

htroot/ aaa /index.php?data =xyz

你将能够在index.php中获取值xyz$_GET['data']