2014-03-05 37 views
0

我想在我的項目中使用乾淨的URL。所以我把這些代碼寫入了一個.htaccess文件。.htaccess mod_rewrite不能在localhost上使用兩個參數

RewriteEngine On 
Options +FollowSymLinks 

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

RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&id=$2 [NC,QSA,L] 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [NC,QSA,L] 

但是,當我嘗試在本地使用它時,它不起作用。
想象一下,我有一個目錄myproject htdocs(www)在我的本地web服務器路徑和其他文件存儲在這個文件夾。現在我可以看到該項目,如果我去localhost/project

現在我想使用網址。
如果我在URI中只有一個參數,如localhost/myproject/tours,那麼效果很好。但如果我有像localhost/myprojects/tours/inside這樣的2個參數,似乎所有的css,js和圖像文件都會消失。我還將RewriteBase /myproject添加到.htaccess文件,但沒有解決。

我的錯誤是什麼?我需要一個適用於遠程和本地服務器的解決方案。

+0

爲什麼不把虛擬主機使用通配符,將自動使裏面的任何文件夾我的項目根源是一個獨特的項目t像'test.myproject','projectb.myproject'等獨特的域而不是本地主機?您還可以將myproject更改爲您認爲合適的任何名稱。 [這是一個沒有通配符的例子,但你可以很容易地實現。](http://stackoverflow.com/questions/18862739/inconsistency-when-switching-between-development-to-live-server/18863056#18863056) – Prix

+0

@ Prix​​我正在尋求一種方式.htaccess –

回答

1

首先,看到我對你對你的代碼的其他問題的回答:Why .htaccess mod_rewrite does not show a real directory

現在,RewriteBase不會解決你的CSS/JS /影像等問題,這是唯一的htaccess以及它定義的基礎規則重寫時的路徑。

避免此問題的一種常見方法是在<head> html標記之後的所有文件中添加一個基本網址。
對你來說,這將是:<base href="http://localhost/myproject/" />

否則,如果你達到localhost/myprojects/tours/inside然後你的CSS/JS /圖像鏈接將被解析成localhost/myprojects/tours/inside/__here__因爲這裏默認的基本路徑是當前目錄(/myproject/tours/inside/),這是不是你想要

編輯什麼:如果是這樣的話,不要忘記從你的CSS /圖片刪除前導斜線/ JavaScript的HTML鏈接

+0

即使現在只有一個參數,它也不起作用。我不知道爲什麼。我已經改變了.htaccess文件,正如你在我的下一個問題中所說的(解決方案1)。 –

+0

你可以給我你試圖達到的網址嗎? –

+0

'http:// localhost/myprojects/home /'是一個樣本 –

0

瀏覽器將通過查看您構建的/ myprojects/tours上下文來從相對URL路徑中構建絕對URL路徑。您可能需要去掉前綴的一個或兩個級別才能找到真正的路徑。

訪問日誌將顯示您使用舊網址和新網址時的相關網址。

+0

我在哪裏可以找到訪問日誌? –