我有三种网址类型如下:
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]
答案 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 phpinfo();
输出中已安装模块的列表
默认情况下,不为htaccess文件启用mod_rewrite。如果您要管理自己的服务器,请打开httpd.conf
并确保webroot目录块包含以下行之一:AllowOverride FileInfo
或AllowOverride 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]