使用.htaccess的良好配置文件url


Good profile urls using .htaccess

我有三个url类型,如下:

http://www.mywebsite.com/myprofile.php?user_username=usernamehttp://www.mywebsite.com/input.php?user_username=usernamehttp://www.mywebsite.com/users.php?user_username=username

目前,用户必须输入整个地址(http://www.mywebsite.com/myprofile.php?user_username=username)才能进入他们的个人资料,输入和用户也是如此。

我想要的是,如果用户输入http://www.mywebsite.com/profile/username,他将自动重定向到http://www.mywebsite.com/myprofile.php?user_username=username

当用户输入http://www.mywebsite.com/input/username时,他将被重定向到http://www.mywebsite.com/input.php?user_username=username .

当用户输入http://www.mywebsite.com/username时,他将被重定向到http://www.mywebsite.com/users.php?user_username=username

我知道这只能通过.htaccess来实现。然而,我已经搜索过了,但没有结果。

请帮忙!

我认为下面的代码是接近正确的。然而,我没有得到正确的结果,css也变得混乱了很多。他们单独工作,但他们在一起搞砸了。请帮忙。

RewriteEngine On
RewriteCond %{THE_REQUEST} ^(GET|POST)' /myprofile'.php'?user_username=(.*)' HTTP
RewriteRule ^ /myprofile/%2'? [R=301,L]
RewriteCond %{QUERY_STRING} !user_username=
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ myprofile.php?user_username=$1 [L]
RewriteCond %{THE_REQUEST} ^(GET|POST)' /user'.php'?user_username=(.*)' HTTP
RewriteRule ^ //%2'? [R=301,L]
RewriteCond %{QUERY_STRING} !user_username=
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ user.php?user_username=$1 [L]
RewriteCond %{THE_REQUEST} ^(GET|POST)' /input'.php'?user_username=(.*)' HTTP
RewriteRule ^ /input/%2'? [R=301,L]
RewriteCond %{QUERY_STRING} !user_username=
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ input.php?user_username=$1 [L]

这样做:

RewriteEngine On
RewriteCond %{THE_REQUEST} 's/+input'.php'?user_username=([^'s&]+) [NC]
RewriteRule ^ /input/%1? [R=302,L]
RewriteCond %{THE_REQUEST} 's/+myprofile'.php'?user_username=([^'s&]+) [NC]
RewriteRule ^ /profile/%1? [R=302,L]
RewriteCond %{THE_REQUEST} 's/+user'.php'?user_username=([^'s&]+) [NC]
RewriteRule ^ /%1? [R=302,L]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^input/([^/]+)/?$ input.php?user_username=$1 [NC,QSA,L]
RewriteRule ^profile/([^/]+)/?$ myprofile.php?user_username=$1 [NC,QSA,L]
RewriteRule ^([^/]+)/?$ users.php?user_username=$1 [NC,QSA,L]

将这些添加到DOCUMENT_ROOT中的.htaccess文件

RewriteEngine On
RewriteRule ^([^/]+)/?$ users.php?user_username=$1 [DPI,L]
RewriteRule ^input/([^/]+)/?$ input.php?user_username=$1 [DPI,L]
RewriteRule ^profile/([^/]+)/?$ myprofile.php?user_username=$1 [DPI,L]

已在Apache 2.2和2.4中测试:)

这假设mod_rewrite是安装为htaccess文件激活。如果您不确定,要检查是否安装了mod_rewrite,请查看phpinfo();输出中的已安装模块列表默认情况下,htaccess文件不启用mod_rewrite。如果您正在管理自己的服务器,请打开httpd.conf并确保webroot目录块包含以下一行:AllowOverride FileInfoAllowOverride All