0

我的 .htaccess 文件目前看起来像这样:

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 这样的 url,对于像http://site.com/aaaa/bbb这样的 url ,$_GET['page'] 变量将只包含 bbb 而不是 aaaaa/bbb。

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

4

5 回答 5

1

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

于 2011-03-12T12:51:12.727 回答
1

在这条线上:

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

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

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

错过^会让你最后一场不贪婪的比赛。

于 2011-03-12T12:53:21.663 回答
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' 或'blah/glop'.


例如,这通常是 Zend Framework 所做的(参见此处以获取参考)

于 2011-03-12T12:54:27.847 回答
0

您使用这些字符范围有什么原因吗?

为什么不使用:

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

使用这样的东西也很危险,你可能会错过“页面” GET 变量。我不确定哪个优先,但要么是不良行为。

我看到的这种行为的示例不会将路径作为 GET 参数传递,而是使用 php 从$_SERVER['REQUEST_URI')

于 2011-03-12T12:56:19.120 回答
0

如果您只想允许[A-Za-z0-9-]每个路径段中的字符,请尝试以下操作:

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

顺便说一句:您应该选择一个拼写,带或不带斜杠,如果是另一种形式,则重定向。

于 2011-03-12T13:39:55.520 回答