我的 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 点赞按钮似乎根本不喜欢我的域名。按钮显示为空白,我认为这与上面的内容有关……?
任何帮助都非常感谢。
答案1
这通常是 mod_rewrite 中不太容易理解的部分。所有规则(除非规则后面跟着[L]
)都按顺序处理,并且规则更改 URI 的值. 它们不会改变 的值%{THE_REQUEST}
。
因此你的第二条规则是:
RewriteRule ^(.*)$ ?/$1 [L]
导致 的请求/hello
被重写为?/hello
。下一个规则的输入现在是?/hello
。
下一条规则:
RewriteRule ^(.*)$ https://myrealdomain.com/$1 [L,R=301]
用于$1
匹配整个 URI,并将 301 重定向发送到新域上的该 URI。这就是问号的由来。这是内部重写,然后在同一请求中进行重定向。
您可以通过将^application
重写和有效文件重写移至底部(所有重定向规则之后)来解决此问题。
您的 https 重定向缺失[L,R=301]
。
我不知道 Facebook 的“点赞”按钮,但在解决问号问题后,如果它仍然不起作用,请尝试再次询问或阅读 Facebook 文档。