2012-06-02 70 views
0

我的最終目標是有這樣的事情。ht訪問問題,例如

127.0.0.1/site/search/search-term

不是,

127.0.0.1/site/search.php?term=

我已經嘗試了兩種代碼片斷,首先是。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ ../search.php?term=$1 

而我把它放在一個名爲/ search的文件夾中。 HTACCESS完美地工作,但CSS讓我的網站搞砸了,它只是將所有內容都顯示爲純文本而沒有任何樣式。

其次我想

RewriteEngine On 
RewriteBase /search/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ ../search.php?term=$1 

也放到了127.0.0.1/site/根。但是,當我嘗試127.0.0.1/site/search/searchterm我得到了一個404.

任何人都可以看到我要去哪裏錯了?我猜測第一個選項是最好的一個工作,因爲它是如此接近,因爲它是如此接近,我仔細看過我使用vainty url後收到的頁面的來源,我認爲這可能與如何鏈接樣式表?它工作,如果我把完整的地址在鏈接(127.0.0.1/site/main.css)但是,然後它所有的失敗,所有我的jQuery包括等等。只是把完整的地址,當我想要使用虛榮網址?

+0

你是htaccess做的另一件事:你的工作目錄將是:'127.0.0.1/term' – Leri

+0

爲什麼?據我所知,rewritebase不必與get變量相同? – Harry

回答

1

首先確保你在CSS,JS和圖片文件中使用絕對路徑。這意味着這些資源的路徑應該以斜槓/http://開頭。如果您還沒有它,請進行必要的代碼更改。一旦在$DOCUMENT_ROOT完成使用後的.htaccess($DOCUMENT_ROOT/site):

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^site/search/(.+)/?$ site/search.php?term=$1 [L,QSA,NC] 

編輯:按這裏您的意見是代碼,以使一個URI以小寫:

先加該行部分或httpd.conf文件的結尾:

RewriteMap lc int:tolower 

然後讓你的規則是這樣的:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^site/search/(.+)/?$ site/search.php?term=${lc:$1] [L,QSA,NC] 
+0

完美。謝謝。最後一件事,是否有辦法讓所有輸入的內容都是小寫的?不重要,但想知道:)回覆後會接受答案。 – Harry

+0

有一種方法可以使所有URI小寫,但它也涉及到在httpd.conf中做一些小改動。請檢查我的答案的編輯部分。 – anubhava