2016-02-19 35 views
-1

我完全是新来这个field.I想改变这个网址DOT用户名不起作用?

http://localhost/livelor/profile.php?username=naveen471996 


http://localhost/livelor/naveen471996 

是的,我这样做,当这样的网址无法访问未找到404

http://localhost/livelor/vikaass.waran 

这是我的.htaccess

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^\.]+)$ $1.php [NC] 

RewriteRule ^([0-9a-zA-z]+)$ profile.php?u=$1 [L] 
+6

它为什么要工作?您的重写程序不允许除数字和a-z之外的任何内容。 '.'。不是允许的字符。 –

回答

1
RewriteRule ^([0-9a-zA-z]+) 

意味着只是个字符0-9 az和AZ被允许

RewriteRule ^([0-9a-zA-z.]+) 

应该解决这个问题,你可以在用户名中使用DOT。

你应该看看正则表达式的

+1

我们真的需要逃避正则表达式中的点吗? – starkeen

+1

@Starkeen当然不是,你是对的。在POSIX它不被认为是一个特殊的字符,感谢指出, –

+0

但它不起作用 –

0

,因为它认为.warran是文件扩展名,且无法加载它返回一个404。要解决这个问题,从用户名或使用%编码或者禁止周期(又名点)(http://php.net/manual/en/function.urlencode.php):

$final_url = urlencode($username); 

然后,当你想对其进行解码,使用:

$user = urldecode($_GET["username"]); 

这样,您将能够通过$ _GET传递大多数UTF-8字符。不过,请注意HTML字符(以及可解码为HTML字符的%代码),因为这可能会导致一些黑客问题。在解码url之前,使用preg_replace()或类似的东西去除那些。

对于%代码的完整列表,请访问http://www.w3schools.com/tags/ref_urlencode.asp

+0

周期不需要像空格(%20)一样编码,Apache不会假设'.waran'是一个文件扩展名。你从哪里得到这些信息? –