【问题标题】:Apache redirect all sub pages to home page except specific pagesApache将所有子页面重定向到主页,除了特定页面
【发布时间】: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 重写规则,它将 所有 子页面指向主页,禁止特定页面。

使用上面的示例,我需要将站点的所有子页面重定向到主页,例如 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;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

我必须保留原来的重写规则,多个重写规则似乎在我的浏览器中给了我一个“这个网站没有正确重定向”的消息,我复制并粘贴了这段代码来修改细节根据需要,但它导致了错误。

【问题讨论】:

    标签: apache apache2


    【解决方案1】:

    在你的 .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 中设置的重定向。

    如果这对您有帮助,请告诉我们。 :)

    【讨论】:

    • 你知道我是否还能保留“RewriteRule ^/(.*)$ server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P] “使用这个规则? - 我已经尝试过你的建议,但我的上述规则似乎与它相冲突。仅供参考,上述规则是 Apache 文件知道在文件系统上将请求发送到何处的唯一方法。
    • 用您的确切网址替换“$ your_domain.com”对您不起作用?
    • 不幸的是,这个文件将域指向我的站点,如果我删除我之前提到的 RewriteRule,Apache 将不知道向哪里发送域的请求(多个站点在这台服务器上运行,我们使用 Apache将请求定向到服务器上的相应区域)
    【解决方案2】:

    www.domain.co.ukVirtualHost 部分中,在RewriteEngine On 行下方插入此代码:

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

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

    【讨论】:

    • 似乎这并不像我想象的那么好。它导致页面 404'ing - 虽然这不是什么大问题,但它似乎只适用于我在括号中输入的页面以代替“条款”等。这很接近,但它不适合“包罗万象”方法的法案
    • 这是我写的所有重写规则中最简单的一条。我可以知道您的代码现在的样子以及它对哪个 URI 不起作用。
    • 这条线有问题:RewriteRule ^/(.*)$ http://server:8000/VirtualHostBase/http/%{HTTP_HOST}:80/root/site/VirtualHostRoot/$1 [L,P]
    • 该行适用于我在问题中发布的原始配置。你知道它有什么问题吗? - 它适用于我们目前设置的许多其他网站
    • 老实说我不知道​​,因为这对我来说根本没有任何意义。
    猜你喜欢
    • 2012-10-29
    • 2016-11-08
    • 2013-12-05
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多