试着再次提出我的问题并尽我所能解释。
我在Windows 10上运行WAMP .Apache版本2.4.18。我的项目位于名为www
的{{1}}文件夹中。 hoidja.ee
已启用,mod_rewrite
已设置为全部。
在该文件夹中我有AllowOverride
文件,我试图在没有重定向的情况下完成重写,但它根本不起作用。我知道.htaccess
文件正在运行,因为我可以将.htaccess
重写为index.php
,并且它工作正常。
我有一个包含所有用户列表的页面。您可以单击该用户,它将转到您的网址:
/home/
我希望如何显示
http://localhost/Hoidja.ee/hoidja.php?user_id=94&username=John
没有任何重定向。
我尝试过:
http://localhost/Hoidja.ee/user/John
这给了我404 / user / 94不存在。
#tried first with only user_id
RewriteCond %{QUERY_STRING} ^user_id=([A-Za-z0-9-]+)$
RewriteRule ^hoidja\.php$ /user/%1? [L]
这并没有在视觉上做任何事情。如果我手动在网址中输入RewriteRule ^user/([0-9]+)/([A-Za-z0-9-]+)/?$ hoidja.php?user_id=$1&username=$2 [QSA]
,它会转到该页面并显示用户数据,但如果我输入原始网址,则不会重写该网页。我也在使用http://localhost/Hoidja.ee/user/94/John
。
我已经尝试了所有可能的方法,但似乎没有任何效果。如何完成网址重写?
答案 0 :(得分:0)
您收到404错误,因为您正在重写为不存在的路径 / user / 94 。您需要重定向 /hoidja.php?user_id = 到 / user / 94 ,然后将 / user / 94 重写回真实位置。
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteCond %{QUERY_STRING} ^user_id=([A-Za-z0-9-]+)$
RewriteRule hoidja\.php$ /hoidja.ee/user/%1? [L,R]
RewriteRule ^(?:hoidja\.ee/)?user/(.+)$ /hoidja.ee/hoidja.php?user_id=$1 [L]