为什么htaccess中的正则表达式不能正常工作?

时间:2013-08-11 04:08:39

标签: .htaccess

我目前使用以下htaccess代码删除所有php扩展,并且还允许加载/index.php页面,而不会使用“index”这个词来查看删除.php的费用:

RewriteRule ^$ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+[^/])$ $1.php [L]

我曾经为每个用户创建一个新页面,但正如人们可能看到的那样,这不是一个好主意。所以我删除了所有的用户页面,我会以不同的方式包含它们,但我需要将请求的页面作为get参数传递给另一个文件。所以我决定将每个主要级别(/)请求页面路由到不同目录中的文件,如下所示:

RewriteRule ^([^/]+)$ some/page.php?requested_page=$1 [L,QSA,NC]

但是如果有人像这样请求它,那么它对/index.php页面不起作用:/

我将代码更改为:

RewriteRule ^(<?!)([^/]+)$ some/page.php?requested_page=$1 [L,QSA,NC]

现在“/”请求有效,任何真正存在的页面都可以使用,但“假用户页面”现在不起作用。我有可能做到这两点吗?

1 个答案:

答案 0 :(得分:1)

尝试更改正则表达式以使用*而不是+

RewriteRule ^([^/]*)$ some/page.php?requested_page=$1 [L,QSA,NC]

因为/请求是一个空URI(在应用规则之前剥离前导斜杠)。