是否有可能使.htaccess“理解”动态相对路径并正确地重定向到它们?
我的设置如下:
http://domain.com/htroot/aaa/xyz
http://domain.com/htroot/bbb/xyz
http://domain.com/htroot/ccc/xyz
等等。为了示例,“htroot”包含我需要修改的.htaccess。以下子级别(aaa,bbb,ccc)可以是任何a-z0-9名称,并且文件夹具有index.php(或要重定向到的任何其他.php)。 xyz
应该作为各种参数,请参阅下一部分。 xyz
部分在文件系统中没有作为“物理”文件夹或文件。
我需要做的是:当您使用网址
进行访问时http://domain.com/htroot/aaa/xyz
它从
获取内容http://domain.com/htroot/aaa/ (or http://domain.com/htroot/aaa/index.php, either way)
index.php开始的地方 - >我可以从REQUEST_URI解析xyz
并处理它以提供它指定的正确内容,而页面的URL自然保持为http://domain.com/htroot/aaa/xyz
。
到目前为止,如果每个子级(aaa等)都拥有它自己的.htaccess,我已经设法将其关闭了,但是我需要一个只有一个.htaccess位于htroot
中来处理这个问题。我猜它可能与.htaccess中的$ 0参数有关,但不确定。
答案 0 :(得分:3)
您可能希望执行以下操作:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ /htroot/$1/index.php?data=$2 [L]
如果第一个通配符匹配(.*)
为aaa
且第二个通配符匹配(.*)
为xyz
(htroot / aaa / xyz),则会从
htroot /的 AAA 强> /index.php?data=的 XYZ 强>
您可以使用$_GET['data']
答案 1 :(得分:1)
好的,我对它的工作方式有些不了解,我想我还有很多东西要学习mod_rewrite。
但是在htroot / .htaccess文件中这样,它可以工作:
RewriteEngine On
RewriteRule ^aaa/(.*)$ aaa/index.php?$1 [L,QSA]
RewriteRule ^bbb/(.*)$ bbb/index.php?$1 [L,QSA]
RewriteRule ^ccc/(.*)$ ccc/index.php?$1 [L,QSA]
您将能够访问$ _GET ['xyz']或您在index.php脚本之后放置的任何内容。您还将在$ _GET数组中获得奖励'index_php'条目,但我猜这是内部重定向的工作方式。
答案 2 :(得分:1)
这应该作为通用规则集:
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php
RewriteRule ^(.*)/(.*) /htroot/$1/index.php?parameters=$2 [L,QSA]