【问题标题】:Redirect everything to public_html将所有内容重定向到 public_html
【发布时间】:2016-07-07 07:47:27
【问题描述】:

我不敢相信我自己找不到解决方案,但就是这样。我希望 Apache 将每个请求(例如 example.com/page.php)重定向到 example.com/http/page.php。我在 Internet 和 StackOverflow 上找到了很多选项,但没有一个有效。现在我明白了:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com\$
RewriteRule (.*) http://example.com/http/$1 [R=301,L]
RewriteRule ^$ http [L]

这会将example.com 重定向到example.com/http,但像example.com/some_page.php 这样的所有内容都会引发404 错误。其他选项要么根本不起作用,要么做同样的事情。 它是 CentOS 上的 Apache/2.2.22,如果这很重要的话。

【问题讨论】:

    标签: apache .htaccess redirect public-html


    【解决方案1】:

    试试这个规则:

    RewriteEngine on
    
    RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
    RewriteRule ^(?!http/).*\.php$ /http%{REQUEST_URI} [R=301,L,NE,NC]
    

    确保在测试之前清除浏览器缓存。

    【讨论】:

    • 现在它会抛出 500 错误,并在日志中显示 unknown flag 'NE'。可能是一些旧的/不兼容的 Apache 版本? upd:文档说 Apache 2.2 应该支持 'NE' 标志,现在我真的很困惑。
    • 抱歉第一行应该有NC而不是NE,试试更新规则
    • 你为什么逃脱了 $ @anubhava?
    • 旨在逃避 DOT 而不是 $
    • 非常感谢!我做了一些更正,它奏效了。我已将 *.php 更改为 *.php|txt|xml(用于 sitemap 之类的内容)并添加了 RewriteRule ^$ /http [L]
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2016-03-04
    • 2016-05-10
    相关资源
    最近更新 更多