1

出于规范化的原因,我试图确保 url 前面总是有 www。

不幸的是,当我输入以下网址时:

http://website.net/handbags/1/12/this-is-some-text

它把我重定向到这里:

http://www.website.net/?controller=handbags&path=1/12/this-is-some-text

我想添加它在使用时可以正常工作:

http://www.website.net/handbags/1/12/this-is-some-text

我希望它把我重定向到这里...

http://www.website.net/handbags/1/12/this-is-some-text

我不确定是什么导致了这个错误。这是我的 .htaccess 文件:

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # CORE REDIRECT
    RewriteRule ^([a-zA-Z]*)/?(.*)?$ index.php?controller=$1&path=$2 [NC,L]

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

</IfModule>
4

2 回答 2

1
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /

    # ENSURE WWW
    RewriteCond %{HTTP_HOST} !^www\.               [NC]
    RewriteCond %{HTTP_HOST} ^([^.]+\.[a-z]{7})$ [NC]
    RewriteRule ^(.*)$       http://www.%1/$1      [R=301,L]

    # CORE REDIRECT
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z]*)/?(.*)?$ index.php?controller=$1&path=$2 [NC,L]
</IfModule>

你可以做我上面所做的;但是,它只会重定向到http://www.website.net/handbags/1/12/this-is-some-text然后它会立即点击“CORE REDIRECT”规则并将您发送到http: //www.website.net/?controller=handbags&path=1/12/this-is-some-text

当他们转到 www 时,您是否有理由不希望它重定向到“?controller=handbags”?

更新

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /

    # ENSURE WWW
    Rewritecond %{HTTP_HOST} !^www\.website\.net
    RewriteRule ^(.*)$       http://www.website.net/$1      [R=301,L]

    # CORE REDIRECT
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z]*)/?(.*)?$ index.php?controller=$1&path=$2 [NC,L]
</IfModule>
于 2013-11-14T23:07:54.907 回答
0

每当您# CORE REDIRECT匹配时,甚至都不会检查其他规则,因为核心重定向规则L设置了标志。那些告诉 Apache 停止尝试其他规则。删除该标志或更改规则。;)

于 2013-11-14T23:15:20.833 回答