2

我已经制定了规则,

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/ 目录???

4

2 回答 2

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] 
于 2012-05-06T16:49:47.147 回答
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 并在您的问题中从那里发布日志。

于 2012-05-06T13:28:25.857 回答