2012-10-28 35 views

回答

1

你在你的.htaccess正確的路線,但你只需要改變[L]標誌爲[L,R = 301]

RewriteCond %{REQUEST_FILENAME} !-f #checks if current URI leads to real file 
RewriteCond %{REQUEST_URI} !(.*)/$ #checks if URI ends by slash, if not goes next 
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L] #this line changes a URI 

您需要更改爲:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://paweljanicki.pl/$1/ [L,R=301] #or skip 301 code [L,R] 
#R=302 by default, but you can set any valid HTTP response status code 300-399 

的密鑰i s [L]標誌不輸出重定向到瀏覽器,但Apache將處理website.pl/頁帶陰影的陰影中的URI(如website.pl/page/)。

更多關於Apache Docs的信息RewriteRule Flags

+0

謝謝。其作品! –

+0

你能告訴我如何將這個問題標記爲「已回答」?因爲我無法在任何地方找到它。 –

0

默認情況下,mod_dir通過DirectorySlash指令(默認設置爲「On」)爲您執行此操作。這意味着如果apache認爲你的請求是針對一個目錄並且缺少一個結尾的斜線,那麼mod_dir將把請求重定向到一個結尾的斜線。

但是,對於CMS中的虛擬目錄或某些東西,apache將無法實現mod_dir需要處理的尾部斜線。所以你可以嘗試附加一個斜槓來指向一個不存在的文件或目錄,或者一個現有的目錄,並且*關閉mod_dir *。

在你的文檔根htaccess文件,添加這些規則(上述任何類型的,你可能已經有路由規則:

DirectorySlash Off 

RewriteEngine On 

# if request is for a directory 
RewriteCond %{REQUEST_FILENAME} -d 
# and is missing the trailing slash 
RewriteRule ^(.*[^/])$ /$1/ [L,R=301] 

# if request isn't for an existing directory or a file 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
# and no trailing slash 
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]