1

我有一个网站说www.abcd.com。如果我使用 url http://abcd.com访问它,它工作正常。但我想要的是,如果用户使用 url http://abcd.com,那么 Web 服务器应该能够将其转换为 url www.abcd.com

%LOCATION_CONTAINS_HTACCESS_FILE% = 一些路径

httpd.config 中的一些重要变化是:

1. DocumentRoot "/var/www/html"


2. <Directory />
    Options FollowSymLinks
    AllowOverride All       #changed to All
</Directory>


3. <Directory "%LOCATION_CONTAINS_HTACCESS_FILE%">
    AllowOverride All
</Directory>


4. AccessFileName .htaccess                             #default
5. %LOCATION_CONTAINS_HTACCESS_FILE%/.htaccess           # I added 
6. <Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

我的.htaccess

RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

通过这些更改,我在执行“ service httpd restart ”时在第 5 行(我认为是上面的)出现错误:

Starting httpd: Syntax error on line 415 of /etc/httpd/conf/httpd.conf:
Invalid command '%LOCATION_CONTAINS_HTACCESS_FILE%/.htaccess', perhaps misspelled or defined by a module not included in the server configuration

我浏览了网络上的大部分链接,但找不到任何具体的解决方案。

我对 Web 服务了解不多。但等待更简单的解决方案。

希望你们已经面对这个问题并且肯定已经解决了。

4

1 回答 1

1

我总是使用下面的代码段:

RewriteEngine On
RewriteBase /

# Redirect non-canonical domains
RewriteCond %{HTTP_HOST}   !^www.yourdomain.com$ [NC]
RewriteRule ^(.*)$         http://www.yourdomain.com/$1 [L,R=301]

# Redirect non-www to www version
RewriteRule %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+\.[a-z]{2,6})$ [NC]
RewriteRule ^(.*)$       http://www.%1/$1      [R=301,L]

它做了两件事:

  1. 第一个片段(在“重定向非规范域”下方)将来自别名(例如 my-domain-alias.com)的访问者重定向到主域(yourdomain.com)。它使用 301 重定向(永久)让搜索引擎知道这是正确的地址(而不是一些重复的内容)。
  2. 它检查是否使用了 www 前缀。如果不是,它会重定向,并且还会使用 301 状态代码进行重定向。

注意:NC 标志告诉 apache 检查忽略大小写。

- 编辑:

我会将订单指令更改为:

# Protect hidden files from being viewed
<Files .*>
        Order Deny,Allow
        Deny From All
</Files>

这将拒绝访问所有隐藏文件(例如,您的 php .user.ini 文件,如果存在),而不仅仅是 .htaccess/.htpasswd 文件等。

于 2013-06-25T12:16:20.680 回答