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

时间:2012-03-06 20:11:32

标签: regex .htaccess redirect

是否有可能使.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参数有关,但不确定。

3 个答案:

答案 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']

在index.php中获取值 xyz

答案 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]