2016-11-13 164 views
0

所以我有这个网站存储在public_html/www /。其他一些域存储在 - 例如public_html/test /中。在public_html我有一个.htaccess文件,其中有很多重定向,它们都适用于/ www /文件夹内的这个网站。在/ www /文件夹里面我有另外一个.htaccess(我不知道为什么,我的同事这样做了,他没有提供信息就离开了我)。由于我不知道.htaccess如何正确工作,我不知道该做什么以及在哪个文件中。.htaccess重定向到子文件夹,非www到www和https

我需要做的是将domain.nl重定向到https://www.domain.nl(应该排除一些文件夹,就像你可以在下面的代码中看到的那样 - emailtemplates,paymentupdate,autocode,nieuwsbrieven等)但是domain.nl被存储在public_html/www /文件夹中,所以它也需要重定向到子文件夹(在Web浏览器中不应该显示)。

此时,在根.htaccess文件如下:

# Use HTTPS 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.nl [NC] 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/emailtemplates 
RewriteCond %{REQUEST_URI} !^/paymentupdate_ideal 
RewriteCond %{REQUEST_URI} !^/autocode 
RewriteCond %{REQUEST_URI} !^/nieuwsbrieven 
RewriteCond %{REQUEST_URI} !^/bevestig-aanmelding-nieuwsbrief 
RewriteCond %{REQUEST_URI} !^/bevestig-afspraak 
RewriteCond %{REQUEST_URI} !^/images/personal 
RewriteCond %{REQUEST_URI} !^/uploadify 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

# Link to subfolder 
# RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?www.domain.nl$ 
RewriteCond %{REQUEST_URI} !^/www/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /www/$1 
RewriteCond %{HTTP_HOST} ^(www.)?www.domain.nl$ 
RewriteRule ^(/)?$ www/index.php?page=home [L] 

# Non-www to www 
#activate rewrite engine 
#RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(www.)?domain.nl 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

大概一半的代码,甚至没有必要的,但我绝对没有线索。其他.htaccess文件,子文件夹/ WWW /内,有下列文字,我真的不明白(它含有较多的,但没有相关的):

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

对不起,如果我听起来很蠢。我已经尝试了很多从互联网上复制的东西,但不幸的是,所有事情都有它的前景,这导致了我们网站的其他问题(链接不再工作,例如)。我认为它不能一直工作的原因是因为它存储在子文件夹中,我不知道如何将所有这些行结合在一起就像它会工作一样。

任何人都可以帮我解释一下如何解决这个问题,这个时候出了什么问题?因为该网站现在不会重定向到www。它只是重定向到https,因为此时存在安全错误(因为SSL存储在www上)。超级感谢提前!

+0

前两步你真的应该开始:1.找到你的同事,并要求一个适当的文档。离开工作是非常不专业的。不,对此类事情没有任何有效的借口。 2.去阅读一些关于apache和'.htacess'风格文件的小教程,以便学习如何使用你想要使用的工具。 – arkascha

+0

谢谢,当然我应该阅读一些教程(并且我会!),但是这并不能在一天内解决问题。我的同事实际上是我的前同事,他不回应我尝试的任何联系。所以很不幸,这是不行的。这就是为什么我必须自己解决这个问题,而且我(也不是他)都有这方面的知识。对不起。 – Claudia

回答

0

我的问题是检查顺序错误。首先,我重定向到https://,但是当我没有使用www。时,它没有重定向到https://www,或者它重定向到https://www.www。我通过重新排列我的规则解决了我的问题,如下所示:

# Non-www to www 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] 

# Permanent redirect to https:// 
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/excluded_folder1/ 
RewriteCond %{REQUEST_URI} !^/excluded_folder2/ 
RewriteCond %{REQUEST_URI} !^/excluded_folder3/ 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

# Use subfolder for domain 
RewriteCond %{HTTP_HOST} ^(www.)?www.domain.nl$ 
RewriteCond %{REQUEST_URI} !^/www/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /www/$1 
RewriteCond %{HTTP_HOST} ^(www.)?www.domain.nl$ 
RewriteRule ^(/)?$ www/index.php?page=home [L]