使用.htaccess重定向到www。并添加尾部正斜杠

时间:2011-03-03 22:27:12

标签: apache http .htaccess mod-rewrite

我已经搜索过一段时间并且自己调整了这个文件并且我几乎在那里但是有一个案例我无法弄清楚... 如何获得两个www。和/同时正斜杠

如果我输入spectrl.com,它会重定向到www.spectrl.com正确 - 添加www。
如果我输入www.spectrl.com/ebaycalculator,它会重定向到www.spectrl.com/ebaycalculator/正确 - 添加/

但如果我输入spectrl.com/ebaycalculator,我会收到404错误,应该去www.spectrl.com/ebaycalculator /

这是我的.htcaccess文件,保存在根目录:

RewriteBase /

Options +FollowSymlinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://spectrl.com/$1/ [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

由于

2 个答案:

答案 0 :(得分:0)

@Kavi

试试这个:

RewriteEngine On

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

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

第一个RewriteCond会在参考www.中捕获主机名(没有任何前导%1)。这种情况总会成功。

第二个RewriteCond检查尾部斜杠;如果找不到,则会触发下一个RewriteRule

第一个RewriteRule使用抓取的www.少主机名来构建包含www.和培训/的重定向。

如果请求失败,将触发第二节,因为 有一个尾随/。它会检查一个前导www.,并执行相同类型的重定向(只是没有附加斜杠,因为已经有一个斜杠)作为第一节。

至少,这就是 的工作原理;我没有测试过。 : - )

答案 1 :(得分:0)

删除并重新上传.htaccess然后清除缓存后,所有内容似乎都在使用问题中的原始代码按预期工作。
希望这对其他人有所帮助。