2017-06-15 49 views
0

我在生产Laravel网站时,到index.php,这里是我的问题有4个简单的URL测试说明:如何避免重定向试图访问非WWW网址

这最后一次测试它的人,我不能修复,这是很烦人的。当我访问没有www的子页面时;如果唯一的解决方案是重新定向到主页,但至少没有index.php这是可以的,这对SEO来说很糟糕。

我知道这些关于htaccess的问题已经被回答了很多次,但我失去了希望......即使是我的专用服务器的技术支持也无法正确回答我的问题。

我目前有两个htaccess文件;一个坐落在我的public_html根/具有以下内容:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

RewriteCond %{HTTP_HOST} ^domain\.kr [NC] 
RewriteRule ^(.*)$ https://www.domain.co.kr/$1 [L,R=301,NC] 

RewriteCond %{HTTP_HOST} ^domain\.co\.kr [NC] 
RewriteRule ^(.*)$ https://www.domain.co.kr/$1 [L,R=301,NC] 

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

而另一个public_html下/公众默认的Laravel的htaccess的内容:

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Handle Authorization Header 
    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

</IfModule> 

你可能会问我为什么有我两个htaccess在两个不同的位置。我也想知道。事情是我已经做了很多测试,并且我发现将www/https规则直接放在根文件夹类型上效果更好。但我可能是错的。

再次抱歉,如果这个问题已被问及百万次,但我找不到适合我的答案。

在此先感谢您的任何帮助。

回答

1

.htaccess文件处理所有的重定向(www或不,https或不),是过度工程。

好像最终域应始终www.domain.co.kr + SSL因此没有必要使用%{HTTP_HOST}为最终域不是动态的,或者说%{HTTPS}s ^on(s)匹配提取s与否。

订单是正确的tho:始终在框架重写之前,完成所有基本重定向/ http(s)之前的

因为你在父文件夹中这样做,所以没关系。您可以将这些规则放在同一个.htaccess文件中,但您必须在之前将它们放在之前。

我会简化它开始:

RewriteEngine On 

# Redirect http to https 
RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA] 

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) https://www.domain.co.kr/$1 [R=301,L,QSA] 

你会注意到我还添加了QSA传递国旗,你可能在原请求的任何查询字符串。

看看你是如何去那里。

此外,请确保您每次尝试新内容时总是清空浏览器缓存,因为重定向的缓存区域为

如果仍然没有工作,你可以在你的Apache配置更改日志级别,检查:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

您可以调试过程中重定向/重写,一步一步发生了什么,以针点实际问题在哪里。

+0

感谢您的回答@胶囊,它看起来像我没有得到这讨厌的index.php了,这是伟大的,因为这是一个大问题。但是,似乎www重定向不起作用。我尝试了关于mod_rewrite日志的建议,但我不确定我应该寻找什么。但我会继续研究它。自从我最大的担忧消失后,我可能会将您的答案标记为已解决。 – Valentincognito

+0

奇怪,因为你不能真正变得更简单,第二条规则,这是应该照顾非www到www重定向。很高兴收到您有关任何进一步调查结果的回复。 – Capsule

+1

好吧,最后我认为最好把这两条规则放在框架的公共文件夹的htaccess中,但作为你提到的第一条规则。奇怪,因为public_html根目录下的htaccess似乎起初工作。也许我已经在我做过的很多测试中迷失了......无论如何现在都好,非常感谢你! – Valentincognito