我的 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}
我希望www
被重定向,我希望所有页面都是https
。它似乎有效,但是当我尝试转到https://www.d.com/hello
它时,它会重定向到https://d.com/?/hello
.
那个多余的问号是从哪里来的?
此外,创建一个类似 facebook 的按钮似乎根本不喜欢我的域。该按钮显示为空白,我认为它与上述内容有关...?
非常感谢任何帮助。
这通常是 mod_rewrite 中鲜为人知的部分。所有规则(除非规则后跟
[L]
)按顺序处理,并且规则更改 URI 的值。它们不会改变 的值%{THE_REQUEST}
。因此你的第二条规则:
/hello
导致重写为的请求?/hello
。下一条规则的输入现在是?/hello
。下一条规则:
用于
$1
匹配整个 URI 并将 301 重定向发送到新域上的该 URI。这就是问号的来源。这是内部重写,然后是同一请求中的重定向。^application
您可以通过在所有重定向规则之后将重写和有效文件重写移至底部来解决此问题。您的 https 重定向丢失了
[L,R=301]
。我对 Facebook 之类的按钮一无所知,但在解决问号问题后,如果它仍然不起作用,请尝试再次询问或阅读 Facebook 文档。