2016-11-08 34 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

相關問題