В моем 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}
.
Отсюда ваше второе правило:
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.