htaccess 301重定向添加本地目录


htaccess 301 redirect adds local directory

所以,问题是:

此地址:website.com/test/test.html/

变为:website.com/www/test/test.html

我需要它是:website.com/test/test.html

站点所在的本地目录是:/www/test-

在我的htaccess文件中,我有:RewriteRule ^(.+)'/$ $1 [R=301,L](如果url末尾有斜线,则重定向时不使用斜线)

它重定向并删除斜杠,除非在.com之后添加本地路径(www)

请记住,在我的RewriteRule中,我不能指定实际地址,因为它是动态的,所以它必须是$1而不是website.com/test/$1

如果不添加本地目录"www",我该如何使其工作?

使用此规则删除尾部斜线:

RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::'2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ %{ENV:BASE}$1 [R=302,L,NE]

来自重写规则的Apache文档:

在目录和htaccess上下文中,模式最初是与文件系统路径匹配,在删除将服务器引导到当前的RewriteRule(例如"app1/index.html"或"index.html",具体取决于指令的定义位置)。

所以我的第一个猜测是,在RewriteRule之前没有定义RewriteCond来匹配URL信息,而不是路径信息。

你可以退房http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond有关RewriteCond的更多信息。在我的脑海里,我猜你会想做这样的事情:

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

如果这不起作用,您可以尝试更改"重写规则",以补偿/www/在您的路径中的事实。类似这样的东西:

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

希望这能有所帮助。Regex和重写可能很痛苦。