所以,问题在于:
此地址:website.com/test/test.html/
成为:website.com/www/test/test.html
我需要它:website.com/test/test.html
网站所在的本地目录是:/ www / test
在我的htaccess文件中,我有:
RewriteRule ^(.+)\/$ $1 [R=301,L]
(如果网址末尾有斜杠,则重定向不带斜杠)
重定向并删除斜线,除了.com之后它添加了本地路径(www)
请记住,在我的RewriteRule中,我无法指定实际地址,因为它是动态的,所以它必须是$ 1而不是website.com/test/$1
如果没有添加本地目录" www"?
,如何才能使其正常工作?答案 0 :(得分:0)
使用此规则进行斜杠删除:
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ %{ENV:BASE}$1 [R=302,L,NE]
答案 1 :(得分:0)
来自RewriteRule上的Apache文档:
在Directory和htaccess上下文中,Pattern最初会是 删除前缀后,与文件系统路径匹配 将服务器引导到当前的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]
如果这不起作用,您可以尝试更改RewriteRule以补偿/ www /在您的路径中的事实。像这样:
RewriteRule ^\/www\/(.+)\/$ $1 [R=301,L]
希望这会有所帮助。正则表达式和重写可能是一种痛苦。