.htaccess 永久链接:哪个重写规则?

.htaccess permalinks: which rewrite rule?

我想将所有用户从 mysite.com/username 重定向到 mysite.com/user.php?user=username

我现在使用以下代码:

RewriteEngine on
RewriteBase /
RewriteRule ([^/.]+)/ user.php?user= [L]
RewriteRule ([^/.]+) user.php?user= [L]

它有效,但它也将目录路径重定向到 user.php(例如 mysite.com/css/style.css -> mysite.com/user.php?user=css/style.css)。

我该怎么办?有什么建议吗?

添加 RewriteCond 以排除以 .css:

结尾的请求
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !\.css$
RewriteRule ([^/.]+)/? user.php?user= [L]

我使用问号 ? 将您的 2 条规则合二为一,使尾部正斜杠成为可选。

如果您愿意,也可以排除其他 "helper" 文件。并且排除重新重写资源请求可能会有所帮助 user.php:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpe?g|gif)$
RewriteCond %{REQUEST_URI} !user.php$
RewriteRule ([^/.]+)/? user.php?user= [L]

您只需要像这样跳过对真实文件和目录的请求:

RewriteEngine on
RewriteBase /

# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/.]+)/?$ user.php?user= [L,QSA]