我试图在.htaccess文件中使用以下Apache重写规则来从URL中删除尾部斜杠。我已在各种论坛的许多主题中看到过这个解决方案:
RewriteRule ^(.*)/$ $1 [L,R=301]
这会导致网址
http://www.domain.com/widgets/
被重写为
http://www.domain.com/usr/local/www/apache22/data/domain/widgets
RewriteRule之前有许多显式301重定向,然后是其他重写条件和规则,但即使它是.htaccess文件中唯一的语句,也会发生同样的事情。
我的linux服务器和XAMPP服务器上都出现了这个问题。在Windows中,URL被重写为
http://www.domain.com/C:/xampp/htdocs/domain/widgets
如果我删除" L"根据规则,301会记录在apache日志中,但不会重写。
此处是此域的vhost条目:
<VirtualHost X.X.X.X:80>
ServerAdmin admin@domain.com
DocumentRoot "/usr/local/www/apache22/data/domain"
ServerName www.domain.com
ErrorLog "/var/log/apache22/domain-error.log"
CustomLog "/var/log/apache22/domain-access.log" combined
<Directory /usr/local/www/apache22/data/domain>
AllowOverride FileInfo
</Directory>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 week"
ExpiresByType text/html "access plus 1 week"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
ExpiresByType text/xml "access plus 1 week"
</IfModule>
</VirtualHost>
有关可能发生的事情的任何建议吗?
答案 0 :(得分:0)
看起来mod_rewrite错误地使用URI路径的文件路径。尝试在规则的目标中添加前导斜杠:
RewriteRule ^(.*)/$ /$1 [L,R=301]
但是,请记住,mod_dir和DirectorySlash
指令(默认情况下已打开)会将所有缺少尾部斜杠的目录/文件夹的请求重定向到带有斜杠的同一URL,并且此规则将创建重定向循环。您可以通过在规则之前包含条件来规避这一点:
RewriteCond %{REQUEST_FILENAME} !-d
答案 1 :(得分:0)
以下作品:
RewriteRule ^(.*)/$ http://www.domain.com/$1 [R=301,L]