Htaccess:从URL中添加/删除尾部斜杠

我的网站运行一个名为 – > WSS壁纸脚本的脚本

我的问题 – >我一直在试图强制删除或添加尾部的斜杠到我的url的结尾,以防止重复的内容,也清理我的url。

我尝试了各种各样的尝试,并尝试了所有我能想到的,从互联网上加载但没有这样的运气呢! 这可能是一个快速的解决办法,但我已经看了很多,我可能是盲目的东西明显死了。

所以我给你提供我所有的.htaccess代码:

 DirectoryIndex index.php RewriteEngine on RewriteRule ^download/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4&download=1 [L] RewriteRule ^file/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) image.php?id=$1&width=$2&height=$3&cropratio=$4 [L] RewriteRule ^preview/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+) wallpaper_preview.php?id=$1&width=$2&height=$3&name=$4 [L] RewriteRule ^thumbnail/([0-9]+)?/([0-9]+)x([0-9]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/]+) image.php?wallpaper_id=$1&width=$2&height=$3&cropratio=$4&align=$5&valign=$6&file=$7 [L] RewriteRule ^cat/([0-9]+)?/([^/\.]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&page=$3 [L] RewriteRule ^cat/([0-9]+)?/([^/\.]+)/([0-9a-zA-Z?-]+)/p([0-9]+) index.php?task=category&id=$1&name=$2&sortby=$3&page=$4 [L] RewriteRule ^cat/([0-9]+)?/([^/\.]+)/([0-9a-zA-Z?-]+)-([0-9]+) index.php?task=category&id=$1&sortby=$3&page=$4 [L] RewriteRule ^cat/([0-9]+)?/([^/\.]+) index.php?task=category&id=$1&name=$2 [L] RewriteRule ^tag/([^/\.]+)/([0-9a-zA-Z?-]+)/([0-9]+) index.php?task=tag&t=$1&sortby=$2&page=$3 [L] RewriteRule ^tag/([^/\.]+) index.php?task=tag&t=$1 [L] RewriteRule ^profile/([0-9]+)?/([^/\.]+) index.php?task=profile&id=$1&name=$2 [L] RewriteRule ^profile/comments/([0-9]+)?/([^/\.]+) index.php?task=users_comments&id=$1&name=$2 [L] RewriteRule ^page/([0-9]+) index.php?task=view_page&id=$1 [L] RewriteRule ^register index.php?task=register [L] RewriteRule ^lost-password index.php?task=lost_pass [L] RewriteRule ^links index.php?task=links [L] RewriteRule ^news/item/([0-9]+)/([^/\.]+) index.php?task=news&id=$1 [L] RewriteRule ^news/page([0-9]+) index.php?task=news&page=$1 [L] RewriteRule ^members/([^/\.]+)-([^/\.]+)/page([0-9]+)? index.php?task=member_list&sort=$1&order=$2&page=$3 [L] RewriteRule ^members index.php?task=member_list [L] RewriteRule ^messages index.php?task=messages [L] RewriteRule ^submit index.php?task=submit [L] RewriteRule ^search/([^/\.]+) index.php?task=search&q=$1 [L] RewriteRule ^search index.php?task=search [L] RewriteRule ^submit index.php?task=submit [L] RewriteRule ^r-([0-9]+)?-([0-9]+)? go.php?id=$1&ref=$2 [L] RewriteRule ^r-([0-9]+)? go.php?id=$1 [L] RewriteRule ^([^/\.]+)/([0-9]+)/([^/\.]+) index.php?task=view&id=$2&name=$3 [L] RewriteRule ^news/([^/\.]+) index.php?task=news&name=$1 [L] RewriteRule ^profile/([^/\.]+) index.php?task=profile&name=$1 [L] RewriteRule ^news index.php?task=news [L] RewriteRule ^page/([^/\.]+) index.php?task=view_page&name=$1 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+)/([0-9a-zA-Z'?-]+)/([0-9]+) index.php?task=category&name=$1&sortby=$2&page=$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+)/([^/\.]+) index.php?task=view&name=$2 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/\.]+) index.php?task=category&name=$1 [L] ## www reslove ## RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] ## www reslove ## ## index reslove ## Options +FollowSymLinks RewriteCond %{THE_REQUEST} ^.*/index\.php RewriteRule ^(.*)index.php$ http://www.epicwallpaper.net/$1 [R=301,L] ## index reslove ## 

RewriteEngine On行的下面,添加:

 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R] # <- for test, for prod use [L,R=301] 

执行一个没有尾随斜线的政策。

要强制执行尾部斜线策略:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*[^/])$ /$1/ [L,R] # <- for test, for prod use [L,R=301] 

编辑 :评论R=301部分,因为,如在评论中解释:

小心R=301 ! 在那里使得许多浏览器无限期地caching.htaccess文件 :如果你无法清除打开它的所有机器上的浏览器caching,它会以某种方式变得不可逆转。 testing时,最好使用简单的RR=302

完成testing后,可以使用R=301

为了补充Jon Lin的回答,这里有一个没有结尾的斜线技巧,如果网站位于一个目录(如example.org/blog/),也可以使用:

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

为了完整起见,下面是一个替代scheme,强调REQUEST_URI以斜杠开始(至less在.htaccess文件中):

 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /(.*)/$ RewriteRule ^ /%1 [R=301,L] <-- added slash here too, don't forget it 

只要不要使用 %{REQUEST_URI} (.*)/$ 。 因为在根目录中, REQUEST_URI等于/ ,引导斜线,并且会被误解为尾部斜线。

如果你对更多的阅读感兴趣:

  • PR 3145为Laravel
  • 关于提交343c31e的讨论
 Options +FollowSymLinks RewriteEngine On RewriteBase / ## hide .html extension # To externally redirect /dir/foo.html to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+).html RewriteRule ^ %1 [R=301,L] RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)/\s RewriteRule ^ %1 [R=301,L] ## To internally redirect /dir/foo to /dir/foo.html RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^([^\.]+)$ $1.html [L] <Files ~"^.*\.([Hh][Tt][Aa])"> order allow,deny deny from all satisfy all </Files> 

这将删除HTML代码或PHP,如果你补充它。 允许你添加结尾的斜杠,它的出现以及没有结尾斜杠的URL都绕过了404代码。 再加上一点点的安全性。

这是我用我最新的应用程序http://wpmove.org

 # redirect the main page to landing ##RedirectMatch 302 ^/$ /landing # remove php ext from url # https://stackoverflow.com/questions/4026021/remove-php-extension-with-htaccess RewriteEngine on # File exists but has a trailing slash # https://stackoverflow.com/questions/21417263/htaccess-add-remove-trailing-slash-from-url RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/?(.*)/+$ /$1 [R=302,L,QSA] # ok. It will still find the file but relative assets won't load # eg page: /landing/ -> assets/js/main.js/main # that's we have the rules above. RewriteCond %{REQUEST_FILENAME} !\.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^/?(.*?)/?$ $1.php