2012-07-28 137 views
1

因此,我設法使用.htaccess文件重寫了URL,但重定向弄亂了URL。例如,我嘗試重寫此:在localhost中用.htaccess文件重寫URL

localhost/mysite/public_html/class/5/ 

到這一點:

localhost/mysite/public_html/index.php?v=class&id=5 

,我使用.htaccess文件中以下行:

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ ./public_html/index.php?v=$1&id=$2 [L,R] 

但瀏覽器重定向這裏我(我在Windows 7上使用wamp):

localhost/C:/wamp/www/mysite/public_html/index.php?v=class&id=5 

這是錯誤的,並得到我一個403錯誤。我該怎麼辦?

+1

因爲什麼時候有一個關於wamp的public_html? – Yehonatan 2012-07-28 12:52:54

+0

我爲了結構的目的創建了這個文件夾。 – 2012-07-28 13:15:49

回答

1

這是令人難以置信。該錯誤是Firefox緩存的結果。我使用了Chrome並且沒問題。所以我清除了Firefox的緩存,一切正常。

2

問題必須來自替換函數(./public_html/index.php)中的./。重寫規則與^和$之間的正則表達式匹配,然後只用第二部分替換。我假設你已經有了某種的RewriteCond的規則之前,所以嘗試刪除「./」

試着改變你的RewriteCond到:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

這意味着,如果請求的URL是不是文件或目錄,然後將落實,並嘗試重寫規則

+0

刪除「./」並不適合我。作爲一個rewritecond,我有這個: ** RewriteCond%{HTTP_HOST}!^ localhost/mysite/$ [NC] **我不確定它是否正確。 – 2012-07-28 15:17:58

+0

我正在打電話,但要確保那些rewritecond在您的重寫規則之前位於不同的行上。也確保你有rewriteengine和mod重寫啓用 – 2012-07-28 17:26:30

+0

我已經嘗試使用噸不同的rewriteconds沒有成功。似乎沒有人有這個問題,所以我找不到任何解決方案。我花了兩天時間試圖找出原因。無論如何感謝您的幫助! – 2012-07-28 19:54:27

2

你的規則需要這個樣子:

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /public_html/index.php?v=$1&id=$2 [L,R] 
1

我不知道哪些規則你之前已經有了,但你極少的htaccess應該是這樣:用你的規則./

RewriteEngine On 
RewriteBase /mysite/ 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /mysite/public_html/index.php?v=$1&id=$2 [L,R] 

迴避,不要忘了位置路徑必須包括mysite文件夾