apache mod_rewrite 重写 sitename.com/ 到 sitename.com/forum 问题

apache mod_rewrite 重写 sitename.com/ 到 sitename.com/forum 问题

我安装了一个论坛,可以通过 sitename.com 访问。我需要让其他一些页面可以通过 sitename.com 访问,让论坛可以通过 sitename.com/forum 访问。我认为将论坛移到另一个文件夹不是一个好主意,所以我决定使用 mod_rewrite。这是我的 .htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301]
    RewriteRule ^forum$ /index.php$1 [S=3]
    RewriteRule ^forum/$ /index.php$1 [S=2]
    RewriteRule ^forum/(.*)$ /$1 [S=1]   
    RewriteRule    ^$ homepage/  [L]
</IfModule>

前两行用于从 www.sitename.com 重定向到 sitename.com。接下来的三条规则用于重定向所有 sitename.com/forum 请求,最后一条规则将所有 sitename.com 请求重定向到主页文件夹。

当前 .htaccess 存在一个问题:如果我打开 sitename.com,它会显示 /homepage/index.php,但如果我打开 sitename.com/index.php,它就不会显示。而是显示 /index.php。

任何想法如何解决这一问题?

答案1

您面临的问题与最后一条重写规则有关。它说的是:

如果我收到对 sitename.com 的请求,则将其发送到主页/

sitename.com/index.php 与此不匹配。

所以,你有几个选择。你可以手动维护这个列表(很麻烦),或者你可以使用一些通配符。

尝试添加如下规则:

RewriteRule    ^*.*$ homepage/  [L]

编辑

经过进一步研究,我认为有一个更好的解决方案。在您的(可能的)指令中,按如下方式修改目录

    DocumentRoot /path/to/public_html

    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory "/path/to/forums/">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    #This moves your forums to a new folder
    Alias /path/to/forums
    <Directory "/path/to/public_html/">
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

或者,当然,您可以修改它以使用 forums 子域,因此用户将转到 forums.example.com 而不是 example.com/forums

相关内容