【发布时间】:2016-05-18 20:53:05
【问题描述】:
非常感谢您对以下内容的帮助。我一直在通过尝试错误来搜索和测试代码,我相信我正在慢慢解决问题,但我希望能在结果和我的学习发展方面提供快速帮助。
我目前通过 GoDaddy 在 apache Linux 服务器上的共享资源上托管了一个网站。我正在努力实现以下目标;-
1) 将非 www 流量重定向到 www。
2) 删除 .html 文件扩展名并在网址上添加尾部斜杠。
我目前有下面的代码,301 www。重定向正在工作,并且尾部斜杠也在工作。但是我在子页面上遇到 404 错误,即 www.swiftcomm.co.uk/contact/;-
如何用代码解决这个问题?
Options +FollowSymlinks -MultiViews -Indexes
RewriteEngine on
# Redirect to domain with www.
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Same for HTTPS:
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Ensure all directory URLs have a trailing slash.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]
# Same for HTTPS:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{REQUEST_URI} !\/[^\/]*\.[^\/]+$
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}/ [L,R=301]
【问题讨论】:
-
您使用的大部分代码似乎有些不必要。 HTTPS 的 www 规则可以合二为一。而且您不需要对尾部斜杠进行 HTTPS 检查。但是,我的问题是:您想删除 html 扩展名并强制使用斜杠。 html 文件是否仍然存在,是否要重写它们?所以请求
/contact/将服务于/contact.html。 (你在这里的意图不是很清楚,所以我需要问一下。) -
迈克,感谢您的回复。我最终试图强制执行,如果有人要输入 swiftcomm.co.uk/contact,它将重定向到 www.swiftcomm.co.uk/contact/,这将由根目录中的 contact.html 页面提供。我希望这更有意义?
-
会的,一会儿就会回答。
标签: linux apache .htaccess redirect web-development-server