2009-01-24 75 views
1
RewriteEngine on 
RewriteRule ^page/?$ page.php [L] 

這最終會匹配url www.site.com/page//,但它在內部表現與www不同.site.com/page /因爲樣式表和圖片不再正確顯示。如果我不想經歷很多麻煩,我是否做錯了什麼或者這只是我需要處理的事情?

對我來說,它看起來像它應該只匹配www.site.com/page或www.site.com/page/

回答

4

阿帕奇條空的路徑段。所以/path//被視爲/path/。但是,您的瀏覽器不會使用/path//來解析相關的URL。

如果你想刪除多個斜線,您可以使用以下規則:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*) 
RewriteRule^/%1%3 [L,R=301] 

儘管阿帕奇消除內部空路徑段時,THE_REQUEST環境變量(持有HTTP request line)保持不動。所以我們可以使用這個值來檢查多個斜線。

  • ^[A-Z]+\ /匹配的請求的方法,下面的空間和URI路徑的第一斜槓字符。
  • (([^/\ ]+/)*)匹配所有下列非空路徑段(foo/foo/bar/foo/bar/baz/等)或沒有,如果有沒有。
  • /+匹配空路徑段作爲該斜槓之前的字符始終是另一個斜槓(請參閱前面的表達式)。
  • ([^\ ]*)匹配URI的其餘部分(可能包含更多的空路徑段)。

例子:比方說,我們要求http://example.com/foo/bar//baz,請求行看起來像這樣:

GET /foo/bar//baz HTTP/1.1 

模式會再搭配如下:

0: GET /foo/bar//baz 
1: foo/bar/ 
2: bar/ 
3: baz 

所以請求的路徑/foo/bar//baz將被重定向到/foo/bar/baz/%1%3)。

+0

輝煌。你能否解釋一下這些行中的每一行? – 2009-01-24 18:37:50

相關問題