2015-10-28 2 views
1

У меня есть CMS Made Simple сайт с хорошими URL-адресами. Я хотел бы перенаправить весь не-WWW-трафик на WWW-адрес, но не может это сделать, не перенаправляясь на WWW-версию сайта, но без хороших URL-адресов.CMS Made Simple .htaccess WWW Redirect

Например, я обращаюсь к example.com/my-page и перенаправляется на www.example.com/index.php?page=my-page. На самом деле я хочу быть перенаправлен на www.example.com/my-page.

Мой текущий файл .htaccess содержит следующее:

# Attempt to override some php settings, these settings may be helpful on some hosts if your 
# default configuration does not meet CMS's minimum requirements, and your host 
# has given your account appropriate permissions 
#php_value upload_max_filesize "10M" 
#php_value session_save_path "tmp/cache" 

#php_flag magic_quotes_gpc Off 
#php_flag register_globals Off 
#php_flag session.use_trans_sid Off 

# (this is important, so uncomment if your host permit) 
#Options -Indexes 
#ServerSignature Off 

#Options +FollowSymLinks 

# To prevent E_STRICT problems with PHP 5.3+ you can uncomment the following lines 
# Note: These settings should only be enabled for production sites! 
#php_flag display_startup_errors 0 
#php_flag display_errors 0 
#php_flag html_errors 0 
#php_value docref_root 0 
#php_value docref_ext 0 

<IfModule mod_rewrite.c> 
RewriteEngine on 
# 
#Sub-dir e.g: /cmsms 
RewriteBase/

# 301 Redirect all requests that don't contain a dot or trailing slash to 
# include a trailing slash 
# but ignore POST requests. 
#RewriteCond %{REQUEST_URI} !/$ 
#RewriteCond %{REQUEST_URI} !\. 
#RewriteCond %{REQUEST_METHOD} !POST$ 
#RewriteRule ^(.*) %{REQUEST_URI}/ [R=301,L] 

# Rewrites urls in the form of /parent/child/ 
# but only rewrites if the requested URL is not a file or directory 
# 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 [QSA] 
</IfModule> 

<IfModule mod_header.c> 
# Disable ETags 
Header unset ETag 
FileEtag None 
</IfModule> 

<IfModule mod_deflate.c> 
# Compress css, plaintext, xml, gif, and images in transport. 
AddOutputFilterByType DEFLATE text/css text/plain text/xml image/gif image/jpeg image/png 
</IfModule> 

<IfModule mod_expires.c> 
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
# Set expires tags on various files... so that the browser wont attempt to reload them. 
ExpiresActive On 
ExpiresDefault "access plus 1 year" 
<IfModule mod_header.c> 
    # Setting cache control to public allowes proxy servers to cache the items too. 
    Header set Cache-Control "public" 
</IfModule> 
</FilesMatch> 
</IfModule> 

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

Любые идеи, как перенаправление на сайт WWW, сохраняя при этом довольно URL-адреса?

+0

Какая у вас проблема? FYI, правило перенаправления www должно быть одним из первых правил в файле .htaccess не последним. Переместите его вверху над другим переписыванием для симпатичных URL-адресов. –

ответ

2

Вам необходимо переместить правило переадресации WWW до того, как вы решите перенаправить URL (проще просто переместиться в верхнюю часть файла).

Причина на самом деле происходит так, как вы заметили, что она перенаправляет симпатичный URL-адрес сначала (RewriteRule ^(.+)$ index.php?page=$1 [QSA]) И поскольку у этого правила нет [L] (то есть не RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]), он проваливается и удаляет вашу WWW-перенаправление с переписанным URL-адресом, поэтому вы перенаправляетесь на URL-адрес без красивого URL-адреса, как вы заметили. Добавить L будет недостаточно, потому что он также попадет в правильное правило URL.

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