【问题标题】:Moving site to a subdomain, .htaccess redirections Apache将站点移动到子域,.htaccess 重定向 Apache
【发布时间】:2018-09-10 10:56:22
【问题描述】:

我在地址http://example.com 有一个站点,它已被配置为删除 url 末尾的 .html(.php 等)并防止热链接事件(搜索引擎除外)。

我想建立一个包含http://us-en.example.com 等子域的多区域站点,并将所有内容从我当前的站点http://example.com 完全移动到http://us-en.example.com。

我有几个关于.htaccess 文件的问题:

问题 1

示例: 用户有一个像 http://example.com/images/all/image1 这样的“清晰”链接,但由于我移动了所有内容,因此该路径不包含图像并且不存在。

如何设置配置文件以将此“干净” url 重定向到“默认”子域 (us-en),从 http://example.com/images/all/image1 到 http://us-en.example.com/images/all/image1,但如果链接已经包含子域,则不执行任何操作?

问题 2

如何为所有子域正确设置.htaccess文件,使其具有与原始子域相同的功能(删除.html/.php并防止热链接)?

问题 3

如何从下面的模板中完成所有这些操作?

DirectoryIndex home.html

Options +MultiViews
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^(.*)\.html$ /$1 [R=301,L]


Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_REFERER}     !^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
RewriteCond %{HTTP_REFERER}     !^https?://([^.]+\.)?example\. [NC]
RewriteCond %{HTTP_REFERER}     !search\?q=cache                 [NC]
RewriteCond %{HTTP_REFERER}     !google\.                        [NC]
RewriteCond %{HTTP_REFERER}     !bing\.                          [NC]
RewriteCond %{HTTP_REFERER}     !yahoo\.                         [NC]
RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]

【问题讨论】:

  • 你可以访问 apache .conf 文件吗?
  • 是的,我愿意@DusanBajic
  • 您的所有子域网站都在不同的文件夹中吗?
  • 是的,他们是@DusanBajic

标签: apache .htaccess subdomain


【解决方案1】:

首先,如果您可以访问 apache 配置文件,则根本不应该使用 .htaccess(详细说明请看here)

第一季度:

在 .conf 中:

<VirtualHost *:80>
  ServerName example.com
  Redirect / https://us-en.example.com/
</VirtualHost>

或者(如果您不想使用 .conf 文件),将其放在 .htaccess 之上:

RewriteEngine on
RewriteCond %{HTTP_HOST} =example.com
RewriteRule ^ https://us-en.example.com%{REQUEST_URI}

对于其他问题,您的规则中没有任何特定域会阻止它们被重用。您应该只更改(将规则从 .htaccess 移动到 VirtualHost 配置时)

RewriteRule ^(.*)\.html$ /$1 [R=301,L]

到

RewriteRule ^/(.*)\.html$ /$1 [R=301,L]

由于在 VirtualHost 上下文中,模式最初将与主机名和端口之后(以及查询字符串之前)的 URL 部分匹配,因此您需要在此处前导 /

【讨论】:

  • 谢谢你的回答!,这一切都只能通过.htaccess来完成吗?
  • 太棒了,非常感谢!我介意我可以问你一些跟进,稍后,当我实施它时? (我现在在手机上)
  • 我是否必须为我创建的每个子域创建新的 .htaccess 文件,或者我只能在我的主目录中有一个文件来满足我的所有需求(Q1,Q2)? @Dusan Bajic
  • 重点是如何为每个子域设置默认的home(或404、etc.)页面?现在我在上面示例的主 .htaccess 文件中使用了这个 DirectoryIndex home.html。我可以以某种方式在主文件中写入规则以避免为每个子域创建新文件吗? @Dusan Bajic
  • 最后一个,我如何处理页面中链接的外部 css 和脚本文件和媒体(图像、视频等)(例如:my-css-file.css、my-scrypt-文件.js)?我想避免每页更改一个补丁。这样做的正确方法是什么?杜桑·巴伊奇
猜你喜欢
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2014-02-23
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多