【问题标题】:htaccess multiple domain, force specific domain and its paths to www and exclude a path but redirect excluded pathhtaccess 多个域,强制特定域及其路径到 www 并排除路径但重定向排除的路径
【发布时间】:2017-11-01 13:31:53
【问题描述】:

如何强制特定域名及其所有路径到 www,特定路径除外,但将该特定路径重定向到另一个域。所以我想要的是强迫 en.one 及其到 www.en.one 的所有路径,en.one/admin 除外。但最重要的是,我希望排除的en.one/admin 转到另一个域http://www.en.me

到目前为止,我已经成功排除了en.one/admin,但我仍然未能将en.one/admin 重定向到http://www.en.me
我的代码

RewriteEngine on
RewriteCond %{HTTP_HOST} ^en.one$
RewriteCond %{THE_REQUEST} !/admin //This excludes the /admin
RewriteRule (.*) http://www.en.one/$1 [R=301,L]

注意:这是一个多站点,多个域由单个 .htaccess 文件管理,因此解决方案对于特定域非常重要。

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    也许你可以尝试连接几个条件

    ## Not www include
    RewriteCond %{HTTP_HOST} !^www\.(.+) [NC]
    ## Not admin directory
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/admin/ [NC]
    ## then rewrite to www.
    RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
    ## And then redirect your admin
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^/admin/(.+) [NC]
    RewriteRule ^(.*) http://www.en.me/$1 [R=301,L]
    

    【讨论】:

    • 感谢您的回答我尝试了您的解决方案,但在访问 /admin 时出现内部服务器错误我尝试了您的解决方案,但我在帖子中提到了这个 .htacces 文件对域非常敏感并且解决方案需要非常特定于领域。我尝试了以下步骤。 RewriteCond %{HTTP_host} ^en.one$ RewriteCond %{REQUEST_URI} !^/admin [NC] RewriteRule ^(.*) http://www.en.one/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/admin/(.+) [NC] RewriteRule ^(.*) http://www.en.me/$1 [R=301, L]
    • 显示的错误信息是RewriteRule: bad flag delimeters
    • 首先,不要忘记在文件顶部使用“RewriteEngine on”打开引擎。
    • 是的,我这样做了,但由于字符限制,我没有包含它。
    • 我可以看到你忘记了 'RewriteCond %{REQUEST_FILENAME} !-d' 行 btw 1st cond 和 request_uri cond
    【解决方案2】:

    感谢 @Christophe 帮助我找到解决方案。您可以在 Christophe 的回答中查看我们作为 cmets 的对话。解决方案是再次重复 HTTP_HOST 条件。所以最后我的.htaccess 看起来像这样。

    RewriteEngine on
    RewriteCond %{HTTP_host} ^en.one$     
    #RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/admin     
    RewriteRule ^(.*) http://www.en.one/$1 [R=301,L]
    RewriteCond %{HTTP_host} ^en.one$
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^/admin         
    RewriteRule ^(.*) http://www.en.me/ [R=301,L]
    

    我相信会有更好的解决方案,但这对我来说就像我想要的那样。

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 2021-04-23
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      相关资源
      最近更新 更多