使用.htaccess的好个人资料网址

时间:2014-06-25 05:46:13

标签: php .htaccess mod-rewrite redirect

我有三种网址类型如下:

http://www.mywebsite.com/myprofile.php?user_username=username http://www.mywebsite.com/input.php?user_username=username http://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]

2 个答案:

答案 0 :(得分:1)

将这些内容添加到.htaccess

中的DOCUMENT_ROOT文件中
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

答案 1 :(得分:1)

这样做:

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]