Apache mod_rewrite模块问题

时间:2012-08-07 13:41:28

标签: php apache .htaccess mod-rewrite

我的.htaccess中有以下代码。

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

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

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

更新

我需要从http://domain.com/css/?u=common获取来自网址的用户名。但是此代码重写了根文件夹中的每个文件夹,因此我的/ css文件夹变为http://domain.com/index.php。如何允许此代码仅适用于{{3}}

2 个答案:

答案 0 :(得分:1)

您所犯的错误是在行/开始使用^/(\w+)/?$

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

尝试这样做:

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

来自RewriteRule Directive docs

  

匹配什么?

     

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

     

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

     

如果您希望与主机名,端口或查询字符串匹配,请分别使用带有%{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

答案 1 :(得分:1)

我认为你是以正确的方式做到这一点,但是以错误的方式解释它!

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

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

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