htaccessredirect将问号添加到url

我在我的htaccess中有以下几点:

#When your application folder isn't in the system folder RewriteCond %{REQUEST_URI} ^application.* RewriteRule ^(.*)$ /?/$1 [L] #Checks to see if the user is attempting to access a valid file, RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ ?/$1 [L] #No WWW RewriteCond %{HTTP_HOST} !^myrealdomain.com$ [NC] RewriteRule ^(.*)$ https://myrealdomain.com/$1 [L,R=301] #Always redirect to SSL pages RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

我希望wwwredirect,我希望所有页面都是https 。 它似乎工作,但是当我尝试去https://www.d.com/hello它redirect到https://d.com/?/hello

那个额外的问号从哪里来的?

另外,创build一个像button的Facebook似乎根本不喜欢我的域名。 button显示为空白,我认为它与上述…?

任何帮助非常感谢。

这通常是mod_rewrite很难理解的部分。 所有规则(除非规则后跟[L] )按顺序处理,规则更改URI的值 。 他们不会更改%{THE_REQUEST}的值。

因此你的第二个规则:

 RewriteRule ^(.*)$ ?/$1 [L] 

导致/hello的请求被重写为?/hello 。 下一个规则的input现在是?/hello

下一个规则:

 RewriteRule ^(.*)$ https://myrealdomain.com/$1 [L,R=301] 

使用$1来匹配整个URI,并将301redirect发送到新域的URI。 这是问号的来源。 这是一个内部重写,然后在同一个请求中redirect。

在所有redirect规则之后,您可以通过将^application rewrite和valid file rewrite移动到底部来解决这个问题。

您的httpsredirect丢失[L,R=301]

我不知道Facebook的button,但解决了问号问题后,如果仍然无法正常工作,请尝试再次询问或阅读Facebook文档。