【发布时间】:2013-11-22 20:50:31
【问题描述】:
是否可以让 htaccess 运行目录直到找到一个并保持正常的 get 完整?例如:
/foo/bar/foobar/test/something?foo=bar&bar=foo
脚本在哪里 /foo/bar/foobar.php 和 foobar.php 有:
array(2)
[foo] = bar,
[bar] = foo
并且测试/某事在某处传递,例如在另一个获取名称“路径/参数”中。
我得到了这个,但它不能很好地处理:
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 on / 并给了我以下信息:
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 脚本中,我想获取“主页”作为页面变量,并且获取背景应该可以工作。
【问题讨论】:
-
我不清楚您的问题?你能试着用更多的例子来解释吗?
-
很抱歉,即使在阅读您的原始和编辑问题 10 多次后,我仍无法理解您的问题是什么以及您想要什么。
-
@anubhava 试图简化它
-
好的,请参阅下面的答案。我怀疑您正在规则中寻找 QSA 标志。
-
基本上是这个stackoverflow.com/questions/10487909/htaccess-reverse-directory,然后是'working gets'
标签: php regex apache .htaccess mod-rewrite