我有三个url类型,如下:
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]
这样做:
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 FileInfo
或AllowOverride All