2013-04-26 148 views
1

我已經有了一個基本的URL重寫導航到文件夾時除外效果很好,:的.htaccess刪除尾隨在URL斜線除非文件夾

當用戶導航到任何文件夾mydomain.com/folder/他被重定向到mydomain.com/folder?pl1=css ,導致無限重定向循環。

我試過在頁面重定向到不帶尾部斜線的規則上面添加RewriteCond %{REQUEST_FILENAME}/ -d。這解決了無限循環的問題,而是打破了重定向到頁面,而無需結尾的斜槓(我想保持對SEO的原因:http://googlewebmastercentral.blogspot.be/2010/04/to-slash-or-not-to-slash.html

我的問題:

  • 如何處理文件夾correclty =>顯示當導航到mydomain.com/foldermydomain.com/folder/(沒有向url添加變量)時,默認頁面(/folder/index.html;如果存在)在文件夾內
  • 對於額外布朗尼分:如何優化第二部分的重寫,如不要使用6行代碼:-)

這是我的代碼:

# Start the rewrite engine 
<IfModule mod_rewrite.c> 
    Options +FollowSymlinks 
    Options -MultiViews 
    RewriteEngine On 
</IfModule> 

# Remove trailing slash 
RewriteRule ^(.*)/$ /$1 [L,R=301] 
# Rule below fixes loop, but breaks redirection 
# RewriteCond %{REQUEST_FILENAME}/ -d 

# Handle my GET variables 
RewriteRule ^([A-Za-z0-9-_]+)/?$                       index.php?pl1=$1          [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$                   index.php?pl1=$1&pl2=$2         [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$               index.php?pl1=$1&pl2=$2&pl3=$3       [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$           index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4     [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$      index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4&pl5=$5   [L] 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$  index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4&pl5=$5&pl6=$6  [L] 

回答

1

如果這個「...導航到文件夾時除外...」是指現有文件夾,您可以嘗試添加之前,在接下來的3行評論# Remove trailing slash

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [L] 

它可以減少規則的單一,只要是沒有問題的空pl6=)。像這樣:

# Handle my GET variables 
RewriteCond %{REQUEST_URI} !index\.php 
RewriteRule ^([A-Za-z0-9-_]+)/?([A-Za-z0-9-_]+)?/?([A-Za-z0-9-_]+)?/?([A-Za-z0-9-_]+)?/?([A-Za-z0-9-_]+)?/?([A-Za-z0-9-_]+)?/? index.php?pl1=$1&pl2=$2&pl3=$3&pl4=$4&pl5=$5&pl6=$6 [L,NC] 

使所有參數都是可選的,除了第一個參數。

+0

非常感謝您的回答! 如果我實現了答案的第一部分,除了重定向到'/ folder /?pl1 = folder'之外,我會得到所需的效果。有任何想法嗎? 您的答案的第二部分似乎不起作用,因爲它會在我的系統中產生404錯誤。另外,我確實有空鑰匙。 – maartenmachiels 2013-04-26 14:05:05

+1

「*另外,我確實有空鍵*」。然後,你需要爲每個參數制定一個規則,就像你的問題一樣。 – 2013-04-26 14:34:53

+0

「* ...重定向到'/文件夾/?pl1 =文件夾*」我想它會被另一個添加查詢的規則重定向。你可以嘗試在我的答案中刪除'RewriteCond%{REQUEST_FILENAME} -f [OR]',這樣它就不會查找文件。但不確定結果。確保在進行任何測試之前瀏覽器的緩存已清除。 – 2013-04-26 14:48:48