存在Htaccess反向查找目录树脚本

时间:2013-11-22 20:50:31

标签: php regex apache .htaccess mod-rewrite

是否有可能让htaccess运行目录,直到找到一个并保持正常的get完好无损?例如:

/foo/bar/foobar/test/something?foo=bar&bar=foo

脚本在/foo/bar/foobar.php和foobar.php的位置在哪里:

array(2)
[foo] = bar,
[bar] = foo

测试/某些东西在某处传递,例如在另一个获取名称'path / params'。

我得到了这个,但它处理不好得很好:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]

RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteCond %{QUERY_STRING} ^(?:param=)?(.*)$
RewriteRule ^(.*?)/([^/]+)/?$ $1/?param=$2/%1 [L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

提前致谢

修改

目前我遇到了以下问题:

我有一个名为/page.php的页面,但是这个page.php检查了某些“选项”,例如/ page / homepage。这有效但是当我添加/ page / homepage?foo = bar时,当前的htaccess使它成为'homepage / foo = bar'而不是单独的get。 我爆炸了params get /并给了我以下内容:

array (size=3)
  0 => string 'page' (length=4)
  1 => string 'homepage' (length=8)
  2 => string 'foo=bar' (length=7)

foo = bar不应该在那里,应该是$ _GET ['foo']或者不管名字是什么,如果更多,更多的名字在它之后。例如:

array (size=3)
  params => string 'page/homepage' (length=13)
  foo => string 'bar' (length=3)
  bar => string 'foo' (length=3)

当前的htaccess看到第一个get作为'param'的一部分。

EDIT2

我想要实现以下目标:

使用htaccess转到页面/page.php它应该看起来像/ page / homepage?background = someColor

在homepage.php脚本中,我希望将“主页”作为页面变量,并且获取背景应该有效。

1 个答案:

答案 0 :(得分:0)

试试这段代码:

RewriteEngine on

RewriteBase /

# If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
# If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
# don't do anything
RewriteRule ^ - [L]

# if current ${REQUEST_URI}.php is not a file then
# forward to the parent directory of current REQUEST_URI
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php !-f
RewriteRule ^(.*?)/([^/]+)/?$ $1/?param[]=$2 [L,QSA]

# if current ${REQUEST_URI}.php is a valid file then 
# load it be removing optional trailing slash
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]