分类 apache 下的文章

Enable Rewrite Module
In order to perform the 301 redirect, we will use the Apache mod_rewrite, or Rewrite, module. Doing so will ensure that your users can access your site with or without the www. prefix, and be redirected to the domain that you prefer.

First, enable the mod_rewrite module with this command:

sudo a2enmod rewrite

With the Rewrite module enabled, we can configure Apache with redirect rules using .htaccess files.

Enable .htaccess Files
Open your Apache configuration file for editing. On Ubuntu, the default configuration file is located at /etc/apache2/sites-enabled/000-default.conf, so we will use that in our example:

sudo vi /etc/apache2/sites-enabled/000-default.conf

Find the DocumentRoot of your site, and take a note of it. By default, it's /var/www/html, so we will use that in our example configuration.

Add the following Directory directive to the configuration and be sure to substitute the DocumentRoot for the highlighted part:

Add to Apache configuration

 <Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
 </Directory>

Save and exit.

Now restart Apache to put the change into effect:

sudo service apache2 restart

Now Apache is configured to read .htaccess files located anywhere under the /var/www/html directory. Let's add our Rewrite rules now.

Configure Rewrite Module
As we mentioned earlier, we will configure the Rewrite module using an .htaccess file.

Change directories to your DocumentRoot, in our case, /var/www/html:

cd /var/www/html

Now open .htaccess for editing:

sudo vi .htaccess

Of course, if you haven't created the file before, it will be blank. Depending on which direction you want to redirect, use one of the following options.

Option 1: Redirect www to non-www
If you want redirect users from www to a plain, non-www domain, insert this configuration:

.htaccess — www to non-www

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

Save and exit. The changes should go into effect immediately. Note that if you are using HTTPS, you should update "http", in the RewriteRule line, to "https".

Use this curl command to ensure that the non-www domain redirects to the www domain (replace the highlighted part with your actual domain):

curl -I http://www.example.com

You should get a 301 Moved Permanently response, that shows the non-www redirect location, like this:

Output:

HTTP/1.1 301 Moved Permanently
Date: Fri, 01 May 2015 21:18:33 GMT
Server: Apache/2.4.7 (Ubuntu)
Location: http://example.com/
Content-Type: text/html; charset=iso-8859-1
Of course, you should access your domain in a web browser (www and non-www) to be sure.

Option 2: Redirect non-www to www
If you want redirect users from a plain, non-www domain to a www domain, insert this configuration:

.htaccess — non-www to www

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

Save and exit. the changes should go into effect immediately. Note that if you are using HTTPS, you should update "http", in the RewriteRule line, to "https".

Use this curl command to ensure that the non-www domain redirects to the www domain (replace the highlighted part with your actual domain):

curl -I http://example.com

You should get a 301 Moved Permanently response, that shows the www redirect location, like this:

Output:

HTTP/1.1 301 Moved Permanently
Date: Fri, 01 May 2015 21:18:33 GMT
Server: Apache/2.4.7 (Ubuntu)
Location: http://www.example.com/
Content-Type: text/html; charset=iso-8859-1
Of course, you should access your domain in a web browser (www and non-www) to be sure.

Conclusion
That's it! Your Apache redirect is now configured properly, and your users will be able to access your web server via your non-www and www domain.

If you would like to understand more about mod_rewrite, the Apache feature that we used to implement the redirect, feel free to read this tutorial: How To Set Up Mod_Rewrite.

免责声明
本博客部分内容来自于互联网,不代表作者的观点和立场,如若侵犯到您的权益,请联系[email protected]。我们会在24小时内进行删除。