【问题标题】:CMS Made Simple .htaccess WWW RedirectCMS 变得简单 .htaccess WWW 重定向
【发布时间】:2016-01-28 10:37:50
【问题描述】:

我有一个启用了漂亮 URL 的 CMS Made Simple 网站。我想将所有非 WWW 流量重定向到 WWW url,但如果不重定向到网站的 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'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]

任何想法如何在保持漂亮 URL 的同时重定向到 WWW 站点?

【问题讨论】:

  • 你有什么问题?仅供参考,www 重定向规则需要是 .htaccess 文件中的第一个规则,而不是最后一个。将它移到其他重写漂亮网址的顶部。

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

您需要将您的 WWW 重定向规则移动到漂亮的 URL 重定向之前(更容易移动到文件顶部)。

原因实际上是您观察到的方式发生的原因是它首先重定向漂亮的 URL(RewriteRule ^(.+)$ index.php?page=$1 [QSA])并且由于该规则没有 [L](即不是RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]),因此它失败并命中您的 WWW 使用重写的 URL 重定向,因此您可以重定向到没有漂亮 URL 的 URL,正如您观察到的那样。添加 L 也是不够的,因为它也会首先达到漂亮的 URL 规则。

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 2011-04-12
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2014-04-09
    • 2012-11-16
    相关资源
    最近更新 更多