2016-09-19 1 views
0

Я настроить правило перезаписи для того, чтобы направлять трафик на domain.comwww.domain.com с помощью следующего правила:Apache .htaccess RewriteRule не включая поддиректории при перенаправлении не-WWW на WWW URL

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 
</IfModule> 

Из моего ограниченного понимания, $1 в RewriteRule должен соответствовать чему-либо после domain.com/, а затем быть размещен в конце моего переписанного URL-адреса www.domain.com/.

Например, domain.com/abc должно быть www.domain.com/abc.

Однако это не работает. Если я перейду к domain.com/abc, то этот путь не переписан вообще, и я просто получаю domain.com/abc без www.

Я много читал, чтобы понять, что $1 должен заботиться об этом, исходя из моего понимания.

Может кто-нибудь объяснить, почему он не работает, поскольку я подозреваю, что это должно быть? Благодарю.

+1

Это означает, что это правило не выполняется вообще. Прокомментируйте строки 'IfModule' и повторите проверку. – anubhava

+0

Он также будет зависеть от контекста, где вы указали это. Если ваш запрос не попадает в конкретный виртуальный хост, где вы его указали, это не повлияет и на него, и т. Д. Это очень сложный способ сделать что-то, указав правильное «имя_сервера» в виртуальном хосте и установив директиву «UseCanonicalName» на 'в виртуальном хосте должно быть достаточно. –

+0

Работает, за исключением '$ 1'. Как и раньше, до того, как я установил это правило, я не перенаправляюсь из 'domain.com', и как только я устанавливаю это правило, я перенаправляюсь на' www.domain.com'. Однако подкаталоги не работают, и здесь возникает путаница. – jamesmarkcook

ответ

0

Получается, что, поскольку я использовал плагин Wordpress и W3 Cache, я просто помещал код в неправильное место в моем файле .htaccess.

Код должен быть помещен в кодовый блок # BEGIN Wordpress и до существующих правил, которые Wordpress уже имеет.

Существующий код должен выглядеть следующим образом:

# BEGIN Wordpress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
#END Wordpress 

Я добавил свой исходный код, чтобы это следующим образом:

# BEGIN Wordpress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
#END Wordpress 

Это устраняет проблему я описывал выше. Спасибо комментаторам за то, что я вызвал мой мыслительный процесс.

Смежные вопросы