2012-08-07 60 views
1

我的.htaccess中有以下代码。Apache mod_rewrite模块问题

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

我试图改写 http://domain.com/?user=usernamehttp://domain.com/username。不幸的是,这段代码不会重写任何内容。请帮忙

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

更新

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

+0

你的URL看起来像你试图重写的http:// domain.com/username'(实际URL)'http://domain.com/?user = username'? – ThinkingMonkey 2012-08-07 13:46:37

+0

@ThinkingMonkey你认为,问题是输入和输出顺序错误? – treng 2012-08-07 13:48:19

+0

是的你的RewriteRule似乎很好。您正尝试从浏览器访问URL“http:// domain.com/username”吗? – ThinkingMonkey 2012-08-07 13:52:18

回答

1

你正在做的错误是在该行^/(\w+)/?$

重写规则剥掉从图案的开始/的开始使用/中要匹配.htaccess和目录上下文。

尝试这样做:

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

RewriteRule Directive docs

什么是匹配的?

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

在Directory和htaccess上下文中,在删除引导服务器到当前RewriteRule的前缀(例如“app1/index.html”或“index.html”,具体取决于指令在哪里定义)。

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


编辑:答案更新每个操作的要求: 补充一点:

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 
1

我认为你是一轮做正确的方式,但是反过来解释了错误的方式!

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

我怀疑它应该重写规则^(\ w +)/ $ /?U = $ 1

此外,要小心你不循环结束了!