2011-03-12 98 views
0

我的.htaccess文件目前看起来是这样的:使用mod_rewrite模拟多个子目录

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L] 

它工作正常的像http://site.com/aaaaa网址,但对于像http://site.com/aaaa/bbb网址$ _GET [“页”]变量将只包含bbb而不是aaaaa/bbb。

有没有办法让页面变量中的所有子目录?

+0

尝试删除结尾/?在RewriteRule – yoavmatchulsky 2011-03-12 12:50:28

+0

多个问题中,搜索 – Efazati 2011-03-12 12:55:35

回答

1

我建议将/添加到最后一行中接受字符的列表中:/?([A-Za-z0-9/-]+)/?$

1

在此行中:

RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L] 

你错过了^整个字符串相匹配。另外,在您的字符串中,您希望在网址中匹配/。所以它应该是:

RewriteRule ^/?([A-Za-z0-9-/]+)/?$ index.php?page=$1 [QSA,L] 

错过了^将让你最后ungreedy比赛。

+0

无需转义'/'。 – Gumbo 2011-03-12 13:37:11

1

为什么不只是拍摄的一切

这个样子,我想:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) temp.php?page=$1 [QSA,L] 


有了这个(考虑到我的脚本是在temp文件夹),既http://tests/temp/blahhttp://tests/temp/blah/glop重定向到t emp.php,与$_GET['page']方含 '嗒嗒'或'blah/glop'


这就是通常做什么用的Zend Framework进行,例如(见here为参考)

0

你有什么理由使用这些范围的字符?

为什么不使用:

RewriteRule ^(.*)$ index.php?page=$1 

而且危险的是使用这样的事情是,你可以错过“页” GET变量。我不确定哪个优先,但这两个都是不好的行为。

例子我见过的这种行为不通过传递路径作为GET参数,而是使用PHP来从$_SERVER['REQUEST_URI')

0

提取它,如果你只想让人物[A-Za-z0-9-]在每个path segments,试试这个:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([A-Za-z0-9-]+(/[A-Za-z0-9-]+)*)/?$ index.php?page=$1 [QSA,L] 

顺便说一句:你应该选择一个拼写,带或不带斜线,然后重定向,如果是其他的形式。