mod_rewrite()内部重定向太多

时间:2014-11-08 04:25:45

标签: regex apache .htaccess mod-rewrite redirect

我已经成功实施了基本的Facebook网址:

内部调用http://example.com/(username)

http://example.com/sites/(username) 使用以下mod_rewrite代码:

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/sites/
RewriteRule ^([^/]+)/?(.*)$ sites/$1/$2 [NC,L]

请注意,(username)文件夹存在于sites文件夹

以上工作完美无缺。但现在我想要美化我的其他网址: http://example.com/(username)/Image/2/这应在内部调用http://example.com/sites/(username)/index.php?type=image&id=2

为此,我在最后一行添加了以下代码:

RewriteRule ^([^/]+)/Image/(.*)$ /sites/$1/index.php?type=image&id=$2 [NC,L]

我希望最后的[L]会在此之后停止计算规则。但是从日志中可以看出它进入了一个无限循环并被截断。

有人可以指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

在DocumentRoot文件夹中,您可以使用此.htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

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

RewriteRule ^([^/]+)/([^/]+)/(\d+)/?$ sites/$1/index.php?type=$2*id=$3 [QSA,L]

RewriteRule ^((?!sites[^/]+)(/.*)?$ sites/$1$2 [NC,L]