mod_rewrite用于目录的尾部斜杠和remove for file url

时间:2012-03-10 05:19:01

标签: regex .htaccess mod-rewrite server-side

确定。我遇到了这个问题,我试图删除文件网址中的最后一个斜杠,例如http://domain.com/styles/styles.css/。我得到了在最后添加斜杠的代码,但无法确定如何进行条件化。

如果网址有extesion,则删除结束斜杠 否则添加斜杠..

这里我现在得到的一些博客说它的解决方案但仍然不能满足我的期望。

RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]

同样存在问题,当我输入http://domain.com/index时,它会转到http://domain.com/inde/。 需要你帮助的人..事先非常感谢。

3 个答案:

答案 0 :(得分:0)

在htaccess中添加以下代码,以便更好地理解。

RewriteCond %{HTTP_HOST} !^\.yourdomain\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]

I have a link : domain.com/folder/
it will change to : domain.com//folder

您也可以通过包含DirectorySlash Off来关闭mod_dir的重定向。

答案 1 :(得分:0)

为什么要对此类“家具”文件进行外部重定向?当然,内部重定向是你想要的吗?

Options     -MultiViews

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

我建议你不要使用它来关闭mutliviews,因为这会产生混淆事物的子请求。

答案 2 :(得分:0)

您的RewriteCond条件在逻辑上已被反转,因为那里有!运算符。所以重写仅适用于那些没有扩展名且没有尾部斜杠的输入!

您可以使用没有条件的单一规则执行此操作:

# Match any sequence of characters, ending in a dot followed
# by one or more characters that don't contain dots or slashes,
# followed by a final trailing slash.
#
# Rewrite this absolutely and treat as redirect.

RewriteRule ^(.*\.[^./]+)/$ /$1 [L, R=301]