所以,问题是:
此地址: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和重写可能很痛苦。