我安装了一个论坛,可以通过 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