我的.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}}
答案 0 :(得分:1)
您所犯的错误是在行/
开始使用^/(\w+)/?$
重写规则从/
和目录上下文中匹配的模式开头剥离.htaccess
。
尝试这样做:
RewriteEngine On
RewriteRule ^(\w+)/?$ /?user=$1
匹配什么?
在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
另外,请注意不要以循环结束!