如何结合强制www和更好的网址?

时间:2017-01-31 14:56:51

标签: apache .htaccess mod-rewrite

在根目录中,我通过www.

强制.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.example\.org$ [NC]
    RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]
</IfModule>

因此example.org变为www.example.org

在子目录/products中,我有另一个.htaccess重写了使用带有斜杠而不是搜索查询的更好的URL

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /products/
    rewriteRule     ^(([a-z0-9\-]+/)*[a-z0-9\-]+)$  $1/                             [NC,R=301,L]
    RewriteRule     ^([a-z0-9-]+)/([0-9-]+)/$       products.php?name=$1&version=$2     [NC]
    RewriteRule     ^([a-z0-9-]+)/$                 products.php?name=$1                [NC]
</IfModule>

出于某种原因,如果我输入example.org/products/,则会强制执行www.。子目录规则是否以某种方式干扰了该规则?我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

这是因为apache没有读取你的root htaccess。 Apache为子文件夹请求读取子文件夹htacess。要为/ products /强制使用www,您需要在/products/.htaccess

中添加以下规则
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [NE,L,R]