Apache URL重写问题

时间:2012-05-05 14:43:50

标签: apache .htaccess mod-rewrite url-rewriting

我已经制定了规则,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1

http://localhost/username重定向到http://localhost/user.php?id=username工作正常, 但是对于其他现有的文件夹页面仍然重定向到user.php页面;不是现有的文件夹,前http://localhost/folder它仍会重定向到http://localhost/folder/?userid=folder, 它如何使它适用于现有目录,例如,当我键入http://localhost/folder然后页面应显示/ folder /目录???

2 个答案:

答案 0 :(得分:1)

将此.htaccess代码替换为:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

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

RewriteRule ^(messages)/?$ index.php?page=$1 [L,NC,QSA]

RewriteRule ^(A-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA]

如果仍然无效,请在access.log中发布匹配的长条目,并在httpd.conf中启用RewriteLog,并在您的问题中发布日志。

答案 1 :(得分:1)

问题是你的第二个RewriteRule没有RewriteConds。你的两个RewriteConds只适用于第一条规则,然后就停止了。因此,第二条规则无条件地适用于每个请求URI。 所以.htaccess的这一部分应该是这样的:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^messages/?$ index.php?page=messages [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ user.php?userid=$1 [L,NC,QSA]