CMS Made Simple .htaccess WWW Redirect

1

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

Например, я обращаюсь к 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 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
    Какие у вас проблемы? К вашему сведению, правило перенаправления www должно быть одним из первых правил в файле .htaccess, а не последним. Переместите это к вершине выше другого переписывания для симпатичных URL.
Теги:
.htaccess
redirect
mod-rewrite

1 ответ

2
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню