2011-07-18 91 views
0

TL; DR

我怎樣才能得到.htaccess改寫http://domain.com/imageshttp://domain.com/images/(即增加一個尾部斜槓的URL沒有一個)?網址可以比一個級別更深,例如http://domain.com/images/page/1的.htaccess翻倒在斜線

更多信息

說我有這樣的URL:

http://jamwaffles2/wallpapers

這將重定向到這個在地址欄,與重寫規則做工精細:

http://jamwaffles2/wallpapers/?page=wallpapers

但是

http://jamwaffles2/wallpapers/(注意斜線)

重複寫細

http://jamwaffles2/index.php?page=wallpapers(用戶不可見)

在地址欄中不錯http://jamwaffles2/wallpapers/

這裏的問題是,如果沒有給出URL的尾部斜線,地址欄中的URL會變成不太漂亮的URL。有人可以提供解決方案嗎?

這裏是我的.htaccess:

# turn rewriting on 
RewriteEngine on 

RedirectMatch permanent ^/$ http://jamwaffles2/home 

Options +FollowSymLinks 

RewriteRule ^([^/\.]+)/?$ /index.php?page=$1 [L,NC,QSA] 
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2 [L,NC,QSA] 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2&var2=$3 [L,NC,QSA] 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /index.php?page=$1&var1=$2&var2=$3&var3=$4 [L,NC,QSA] 

作爲一個側面說明,有更多層次的URL; .htaccess應該明顯(例如http://jamwaffles2/home/page/2)。

編輯

奇怪的是,這只是發生在/wallpapers。如果我輸入http://jamwaffles2/home它按預期工作,但不會與http://jamwaffles2/wallpapers一起使用。

+0

你有一個名爲'wallpapers.php'或類似的文件嗎? – LazyOne

+0

我這樣做,這是.htacces應該通過'/ index.php'打開的。它適用於與「wallpapers.php」相同目錄中的頁面,例如'home.php'。 – Bojangles

回答

1

1)試試這個指令:Options +FollowSymLinks -MultiViews - 根據Apache的配置,它可以成爲交易斷路器。

2)使用這個代碼(可能的變種之一)添加斜線的非現有資源ONLY:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*[^/])$ /$1/ [R=301,L] 

會重定向(301永久重定向),所以URL將在瀏覽器中改變(例如example.com/hello =>example.com/hello/)。


如果仍然無法正常工作(無論何種原因可能是) - 如果你可以編輯Apache的配置文件 - 請啓用重寫調試(RewriteLogLevel 9),並檢查重寫日誌明白了爲什麼有些網址失敗正確的重寫。每臺服務器都可以配置不同,所以相同的規則在你的情況下可能有點不同。

+0

非常感謝LazyOne。我現在已經解決了這個問題 - 這是由於Apache的緩存文件的舊版本,或者什麼;它現在工作正常:-) – Bojangles