2016-11-08 31 views
1

试着再次问我的问题,并尽我所能解释它。如何在不重定向本地主机的情况下重写htaccess中的url?

我在windows 10上运行WAMP。Apache版本2.4.18。我的项目位于www文件夹中,名称为hoidja.eemod_rewrite已启用,AllowOverride设置为全部。

在该文件夹中我有.htaccess文件,我试图完成重写而不重定向,它根本不起作用。我知道.htaccess文件正在工作,因为我可以将index.php改写为/home/例如,它工作得很好。

我有一个包含所有用户列表的页面。您可以点击用户,它会带你到一个网址:

http://localhost/Hoidja.ee/hoidja.php?user_id=94&username=John

如何,我想这表明的是

http://localhost/Hoidja.ee/user/John 

没有任何重定向。

我曾尝试:

#tried first with only user_id 
RewriteCond %{QUERY_STRING} ^user_id=([A-Za-z0-9-]+)$ 
RewriteRule ^hoidja\.php$ /user/%1? [L] 

这给了我404 /用户/ 94不存在。

RewriteRule ^user/([0-9]+)/([A-Za-z0-9-]+)/?$ hoidja.php?user_id=$1&username=$2 [QSA] 

这不会在视觉上做任何事情。如果我手动输入http://localhost/Hoidja.ee/user/94/John,它将进入该页面并显示用户数据,但如果输入原始URL,则不会重写它。我也使用<base>

我尝试了所有可能的方法,但似乎没有任何工作。我怎样才能完成网址重写?

+0

使用_both_,一个用户ID和用户名没有什么意义,它只是使事情更加复杂和暧昧... – arkascha

+0

@arkascha这是真的。我正在使用user_id从数据库中提取数据,但我想在url中显示用户名 – raqulka

+0

好吧,没有任何反对显示名称(为什么)。但是在重写过程中,您不必重写它或考虑它,是吗? – arkascha

回答

0

你所得到的404错误,因为你正在重写到一个不存在的路径/用户/ 94。你将需要重定向/hoidja.php?user_id=/用户/ 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] 
+0

试过了,它确实重写了url。但它现在给我这个:http:// localhost/user/83所以它到本地主机文件夹,而不是最初的 – raqulka

+0

是的。它现在工作。告诉我,就像我在我的问题中所说的:我可以显示用户名而不是user_id吗?所以我必须在URL中的参数。这可能吗?所以url最终将如下所示:http://localhost/Hoidja.ee/user/John – raqulka

+0

不,这是不可能的。你需要在你的slu id中找到用户信息。 – starkeen

相关问题