1

我有一个这样的网站结构:

www.domain.com
www.domain.com/subpage-a
www.domain.com/subpage-b
www.domain.com/terms
www.domain.com/request-information

我正在尝试配置一个 Apache 重写规则,它将所有子页面指向主页,禁止特定页面。

使用上面的示例,我需要将站点的所有子页面重定向到主页,比如termsrequest-information页面。

我一直在查看 StackOverflow 并且发现了一些没有答案的问题,例如this onethis one。第二个链接似乎有点像我想要的,但我不确定如何覆盖特定页面的规则。

我的配置

目前,我的 Apache 文件如下所示:

<VirtualHost *:80>
 ServerName www.domain.co.uk

 ProxyPreserveHost On
 RewriteEngine On
 RewriteRule ^/(.*)$ http://server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P]
</VirtualHost>

<VirtualHost *:80>
 ServerName domain.co.uk
 Redirect permanent / http://www.domain.co.uk/
</VirtualHost>

为了让这个工作我附加了这个,只是为了看看我是否可以获得一个子页面来重定向:

<VirtualHost *:80>
 ServerName http://www.domain.co.uk/subpage-a
 Redirect permanent / http://www.domain.co.uk/
</VirtualHost>

这不起作用,但由于该站点有很多子页面,我真的想要更多的包罗万象的规则,对于某些子页面将被忽略。

这可能吗?有人有什么想法吗?

谢谢。

TL;博士

我正在寻找一个“包罗万象”风格的 Apache 重写规则,它将重定向每个子页面,将某些页面禁止到域的主页。

编辑

关于下面的答案,我尝试了以下方法:

答案#1

我修改了我的代码,如下所示:

<VirtualHost *:80>
 ServerName sub.domain.co.uk

 ProxyPreserveHost On
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !^/(terms|request-information)(/.*|)$ [NC] 
 RewriteRule ^/(.*)$ http://server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P]
</VirtualHost>

<VirtualHost *:80>
 ServerName domain.co.uk
 Redirect permanent / http://www.domain.co.uk/
</VirtualHost>

但是,似乎 404 包含破折号的页面,我可以忍受这一点,但不幸的是,它需要我列出我想重定向的所有页面来代替terms|request-information上面的页面。

答案#2

我必须保留原始的重写规则,多个重写规则似乎在我的浏览器中给了我“此网站未正确重定向”消息,我对此代码进行了复制和粘贴,必要时修改了详细信息,但是它导致了错误。

4

2 回答 2

0

在插入此代码的VirtualHost部分中,就在下面一行:www.domain.co.ukRewriteEngine On

RewriteCond %{REQUEST_URI} !^/(terms|request-information)(/.*|)$ [NC]
RewriteRule ^ / [L,R=301]

编辑: 多个重写规则似乎会导致重定向错误,只使用一个。

于 2013-08-08T11:06:59.077 回答
0

在你的 .htaccess 中试试这个

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(.*)\.your_domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.your_domain.com/ [R=301,L]
RewriteCond %{REQUEST_URI} !"^/$"
RewriteRule (.+) http://%{HTTP_HOST}/ [R=301,L]

这将作为包罗万象。确保在使用之前注释了 httpd.conf 中设置的重定向。

让我们知道这是否对您有所帮助。:)

于 2013-08-08T11:48:16.977 回答