【发布时间】:2017-09-14 13:04:32
【问题描述】:
使用 Htaccess,我可以从 url 中删除 www,但我一直在努力彻底删除 index.php。
我正在使用 codeigniter 框架并检查了我的配置文件。
$config['index_page'] = '';
$config['base_url'] = '';
我也试过了:正如 S.O 其他地方有人建议的那样:
$config['base_url'] = '/';
我的 htaccess 文件如下所示:
重写引擎开启
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
#Force non-www:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com [NC]
RewriteRule ^(.*)$ http://mywebsite.com/$1 [L,R=301]
我尝试了编写模式重写规则的所有不同版本,这个效果最好,但它在 URL 中添加了一个问号和一个正斜杠 重写引擎开启
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php?/$1 [L,QSA]
现在的结果,如果我输入www.mywebsite.com,它会变成mywebsite.com,这是正确的。
但是如果我输入 www.mywebsite.com/someuri 然后它变成 www.mywebsite.com/index.php?someuri
使用最后一个 modrewrite 规则,url 变为 www.mywebsite.com/?/someuri
然后我尝试在 index.php 之后添加问号,如下所示:
# Now the CodeIgniter part
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
对于后者,如果我在 URL 中输入 index.php,它不会消失。
我显然不懂 mod-rewrite,有人可以指导我正确的方向。
【问题讨论】:
-
可能是因为您的强制非 www 规则中有
[L,R=301]。L表示最后一条规则,所以不要进一步处理。尝试从那里删除它。我目前无法对其进行测试以获得答案,我不在安装了 Apache 的机器上。 -
你可能会发现这个 htaccess 测试器真的很方便http://htaccess.madewithlove.be/
-
我去掉了[L] 结果还是一样。不过值得一试
-
不要将基本网址留空
标签: .htaccess codeigniter indexing