【发布时间】:2013-08-08 10:31:01
【问题描述】:
我有这样的网站结构:
www.domain.com
www.domain.com/subpage-a
www.domain.com/subpage-b
www.domain.com/terms
www.domain.com/request-information
我正在尝试配置一个 Apache 重写规则,它将 所有 子页面指向主页,禁止特定页面。
使用上面的示例,我需要将站点的所有子页面重定向到主页,例如 terms 和 request-information 页面。
我一直在查看 StackOverflow,发现一些问题没有得到解答,例如 this one 和 this 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;DR
我正在寻找一个“包罗万象”风格的 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
我必须保留原来的重写规则,多个重写规则似乎在我的浏览器中给了我一个“这个网站没有正确重定向”的消息,我复制并粘贴了这段代码来修改细节根据需要,但它导致了错误。
【问题讨论】: