.htaccess 将子域重定向到动态生成的文件夹并屏蔽URL

.htaccess 将子域重定向到动态生成的文件夹并屏蔽URL,.htaccess,mod-rewrite,redirect,mask,subdomain,.htaccess,Mod Rewrite,Redirect,Mask,Subdomain,我目前有一个博客设置,作为主站点的子文件夹,mydomain.com.au/blog/,但是/blog是通过PHP动态生成的,实际上并不存在 我已经创建了一个子域名blog.mydomain.com.au,我正试图让它像mydomain.com.au/blog/一样显示所有内容,但要屏蔽url,使其显示blog.mydomain.com.au 我使用htaccess做了几次尝试,也有几次接近,但总是有一些问题。以下是我最接近预期结果的两次尝试: 第一次尝试 RewriteEngine On Re

我目前有一个博客设置,作为主站点的子文件夹,
mydomain.com.au/blog/
,但是
/blog
是通过PHP动态生成的,实际上并不存在

我已经创建了一个子域名
blog.mydomain.com.au
,我正试图让它像
mydomain.com.au/blog/
一样显示所有内容,但要屏蔽url,使其显示
blog.mydomain.com.au

我使用htaccess做了几次尝试,也有几次接近,但总是有一些问题。以下是我最接近预期结果的两次尝试:

第一次尝试

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog\.mydomain\.com\.au$
RewriteRule ^.*$ http://www.mydomain.com.au/blog%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com\.au$ [NC]
RewriteRule blog/(.*) http://blog.mydomain.com.au/$1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
这将使
blog.mydomain.com.au
重定向到
www.mydomain.com.au/blog/
,但不会屏蔽URL(地址栏将显示
www.mydomain.com.au/blog/

第二次尝试

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^blog\.mydomain\.com\.au$
RewriteRule ^.*$ http://www.mydomain.com.au/blog%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com\.au$ [NC]
RewriteRule blog/(.*) http://blog.mydomain.com.au/$1 [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

这是最接近我的。它重定向并屏蔽URL,就像我希望它在
/blog/
下的所有页面那样(例如blog.mydomain.com.au/whatever/重定向到www.mydomain.com.au/blog/whatever/,但将URL屏蔽为blog.mydomain.com.au/whatever/),但它不会为
blog.mydomain.com.au
执行此操作,它被重定向到
www.mydomain.com.au

这里有两种不同的要求。第一个是重写,如果请求是
blog.mydomain.com.au
,并且您删除了域部分和规则替换中的标志,那么重写将起作用

RewriteCond %{HTTP_HOST} ^blog\.mydomain\.com\.au$ [NC]
RewriteRule !^blog/ /blog%{REQUEST_URI} [L]
如果请求是
www.mydomain.com.au/blog/

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com\.au$ [NC]
RewriteRule blog/(.*) http://blog.mydomain.com.au/$1 [R,L]
当一切正常时,您可以将
R
更改为
R=301

切勿在启用
301
的情况下进行测试,请参阅此答案
有关详细信息。

感谢您的回复和非常有用的链接!我试过你的规则,但同样的事情也发生了。blog.mydomain.com.au重定向到www.mydomain.com.au。而且,奇怪的是,它工作了几次,然后就不工作了。。。在添加规则后清除浏览器缓存后,我通过单击博客上的几个链接进行了测试。他们本来打算去blog.mydomain.com.au/whatever,但点击几下(可能是6次)后,又回到了www.mydomain.com.au/whatever。。。我又回到了原来的规则,但把301改成了302重定向。@RazvanCostica,我想,博客中的链接有时是相对链接,有时是包含域的绝对链接。场景是这样的:我有一个带有集成博客的网站,现在我正试图根据我的客户请求将博客从www.mydomain.com.au/blog移动到blog.mydomain.com.au,实际上不必从博客中导出所有内容并在博客文件夹下重新创建,因为这将非常耗时。因此,博客中的所有链接都具有URL结构www.mydomain.com.au/blog/whatever/,并试图将它们重定向到blog.mydomain.com.au/whtever.Now,我已经成功地对所有URL执行了该操作(无论您是在地址栏中手动键入它们还是在现有链接上键入时钟),除了文档root blog.mydomain.com.au将重定向到www.mydomain.com.au而不是www.mydomain.com.au/blog/。我使用了faa建议的以下代码:
RewriteCond%{HTTP_HOST}!(www\)?blog\.raca\.com\.au[NC]重写规则^blog/?(*)$http://blog.raca.com.au/$1[L,R]
有什么建议吗?@faa很抱歉,我很着急,但我的ISP告诉我一切都很好,并告诉我要正确配置htaccess。但我认为htaccess配置可能确实存在问题,因为如果主apache配置文件出现问题,我的第一条规则不会重定向到/blog/,对吗?有没有办法把你给我的代码和我的第一条规则结合起来?再次感谢!