是否可以使用.htaccess更改子域的目录?

时间:2013-10-17 02:08:19

标签: php apache .htaccess mod-rewrite

我有一个图像共享网站,我曾经有一个图像的子域,但我不得不删除它,所以现在我使用图像的真实路径:

旧网址:

http://img.site.com/images/2013/03/abc.jpg

新网址

http://site.com/files/images/2013/03/abc.jpg

问题在于我有很多图像链接来自其他网站和仍在使用旧网址的搜索引擎。

旧子域的问题在于它的目录(public_html/files)及其名称(img.)是不同的,因此需要特殊配置来处理它,我厌倦了所有它引起的问题。

现在我创建了一个指向img.目录的普通public_html/img子域,因此无需额外配置,但我的图像仍在public_html/files目录中。 / p>

我认为我现在要做的就是以某种方式使用.htacess替换旧目录。我不知道这是否可能。

目前我的.htaccess

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /
    RewriteCond %{HTTP_HOST} ^img\.site\.com$ [NC]
    RewriteRule ^(images/.*)$ http://site.com/files/images/$1[R=301,NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{ENV:REDIRECT_STATUS} ^$

    RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
</IfModule>

当我尝试从子域调用图像时,我得到:

Not Found

The requested URL /files/images/2013/10/15c100d1da3216850d6cceb4ce57eaab6d26fc92.jpg was not found on this server.
img.site.com

我的错误日志报告:

[Mon Oct 21 02:58:46 2013] [error] [client 85.185.229.221] script '/home/site/domains/site.com/public_html/img/index.php' not found or unable to stat

4 个答案:

答案 0 :(得分:1)

您应该重定向到正确的位置。在public_html/img目录中的htaccess文件中执行:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^img\.site\.com$ [NC]
RewriteRule ^images/(.*)$ http://site.com/files/images/$1 [L,R=301]

或者只是

Redirect 301 /images http://site.com/files/images

答案 1 :(得分:1)

好的,试试这个:



RewriteEngine On

RewriteCond %{HTTP_HOST} ^img\.your-domain\.com$ [NC] 
RewriteRule ^images/(.*)$ /files/images/$1 [L,R=301]


答案 2 :(得分:1)

您修改过的.htaccess看起来像(假设它位于文档根/

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{HTTP_HOST} ^img\.site\.com$ [NC]
    RewriteRule ^(images/.*)$ http://site.com/files/$1 [R=301,NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

RewriteCond首先检查域名,如果是旧域img.site.com,请将所有/images个请求重定向到新网址。

答案 3 :(得分:1)

我可以提供间接解决方案,您必须对页眉或页脚文件进行一些更改,为此,在.htaccess中键入以下行,

HeaderName /path/.../header.html (if .html) or if .php header then,

AddType text/html .php
Addhandler application/x-httpd-php .php
HeaderName /path/.../header.php

或者只是ReadmeName /path/.../footer.html for footer, 然后使用copy + unlink(用于移动文件但速度慢),(或者精确地重命名()将是一个更好的选项),在该文件中用于您的任务。