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/folder
或mydomain.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]
非常感謝您的回答! 如果我實現了答案的第一部分,除了重定向到'/ folder /?pl1 = folder'之外,我會得到所需的效果。有任何想法嗎? 您的答案的第二部分似乎不起作用,因爲它會在我的系統中產生404錯誤。另外,我確實有空鑰匙。 – maartenmachiels 2013-04-26 14:05:05
「*另外,我確實有空鍵*」。然後,你需要爲每個參數制定一個規則,就像你的問題一樣。 – 2013-04-26 14:34:53
「* ...重定向到'/文件夾/?pl1 =文件夾*」我想它會被另一個添加查詢的規則重定向。你可以嘗試在我的答案中刪除'RewriteCond%{REQUEST_FILENAME} -f [OR]',這樣它就不會查找文件。但不確定結果。確保在進行任何測試之前瀏覽器的緩存已清除。 – 2013-04-26 14:48:48