1

我的 .htaccess 中有以下代码。

RewriteEngine On
RewriteRule ^/(\w+)/?$ /?user=$1

我正在尝试将 http://domain.com/?user=username重写为http://domain.com/username。不幸的是,这段代码没有重写任何东西。请帮忙

注意:我检查phpinfo()并加载了 mod_rewrite。

更新

我需要从像http://facebook.com/username这样的 url 获取用户名。但是这段代码重写了根文件夹中的每个文件夹,所以我的 /css 文件夹变成了http://domain.com/css/?u=common。如何允许此代码仅适用于http://domain.com/index.php

4

2 回答 2

1

您正在做的错误是/在行首使用^/(\w+)/?$

/重写规则从要匹配的模式的开头.htaccess和目录上下文中剥离。

尝试这样做:

RewriteEngine On
RewriteRule ^(\w+)/?$ /?user=$1

来自RewriteRule 指令文档

什么是匹配的?

在 VirtualHost 上下文中,Pattern 最初将与 URL 的主机名和端口之后以及查询字符串之前的部分进行匹配(例如“/app1/index.html”)。

在 Directory 和 htaccess 上下文中,模式最初将与文件系统路径匹配,在删除引导服务器到当前 RewriteRule 的前缀之后(例如“app1/index.html”或“index.html”,具体取决于指令的位置定义)。

如果您希望匹配主机名、端口或查询字符串,请分别使用带有 %{HTTP_HOST}、%{SERVER_PORT} 或 %{QUERY_STRING} 变量的 RewriteCond。


编辑:根据 OP 的要求更新答案:添加:

RewriteEngine On

#do nothig if URL is trying to access the folder CSS.
RewriteRule *css/* - [L]

#checks where the URL is a valid file/folder.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/?$ /?user=$1
于 2012-08-07T13:56:15.387 回答
1

我认为您的做法是正确的,但是却以错误的方式解释了它!

问题是您不需要初始 / 因为传递给测试的 URL 不包含它!?

我怀疑它应该是 RewriteRule ^(\w+)/?$ /?u=$1

另外,请注意不要以循环结束!

于 2012-08-07T13:56:15.747 回答