2011-09-28 35 views
0

我無法圍繞URL重寫包裝頭。我想要做的事情似乎很簡單,但我在獲得我想要的結果時遇到了問題。創建一個簡單的規則來重寫一個友好的URL到物理URL

我想讓用戶輸入www.mysite.com/search/real並在最後加上一個可選的/。這將他們帶到www.mysite.com/content/search_real_property.asp

就是這樣。這是我現在的規則。問題在於它會保持堆疊。

RewriteRule ^(search) content/search_real_property.asp

所以這會工作/search/real但這樣會search/real/search/real/search/real/ 等。

+0

你真的嘗試過,發現它會導致無限循環?如果是這樣,還有其他事情正在發生 - 規則本身不是遞歸的。 –

+0

它可能不是遞歸的,但它並沒有終止,所以你可以在「真實」之後放置任何東西,它會重定向。 – CD001

回答

1

假設沒有其他問題,您已經打開了重寫引擎(RewriteEngine On),並且您要麼在httpd-vhosts.conf中添加重寫,要麼在Web樹的根目錄中添加.htaccess文件(以便解決任何路徑問題)...那麼問題僅僅是正則表達式模式匹配之一。儘管我對ASP似乎是一個Apache服務器運行感到困惑(假設我們正在談論這個重寫模式)。

所以,你真正想要的是終止比賽 - 是這樣的:?

RewriteEngine On 
RewriteRule ^search/real/?$ /content/search_real_property.asp 

這將其固定/搜索/實(帶或不帶後綴斜線,則表示匹配前面的字符0或1次)到/content/search_real_property.asp。由於$符號表示行結束符(EOL有效),所以「真實」之後一定沒有任何內容(除了可能是1個正斜槓)。

對於你可能想看看你其實可以使用正則表達式做,例如更大的靈活性...

RewriteEngine On 
RewriteRule ^search/([^/]*)/?$ /content/search_real_property.asp?query=$1 

這將允許你採取任何字符串,並將它傳遞的地址欄中顯示爲一個名爲query的變量(Request.QueryString('query')IIRC)。

嘗試:http://www.regular-expressions.info/瞭解更多信息。