我正在维护一个大部分由另一个开发团队开发的网站。我正在开发新功能,但有时我不知道一些旧代码是如何工作的。该网站是使用CodeIgniter开发的,并且有一个包含单个规则的简单.htaccess文件。我不擅长PHP或mod_rewrite,所以我需要你的帮助。
在.htaccess文件中有以下行:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
我在Google上搜索mod_rewrite,我想上面的代码会检查所请求的内容是不是文件或目录,如果没有,它会重写在域之后插入index.php?/的URL。例如,如果我请求http://www.example.net/teste,它将被重写为http://www.example.net/index.php?/teste。我对吗?我还假设这样做是为了匹配CodeIgniter的URL格式,包括框架中的index.php,对吗?但我认为很奇怪的是,即使在RewriteRule终止执行后,我也无法在URL中看到index.php?/(但没关系,这正是我想要的)。
我现在的问题是,我想将没有www的所有网址重定向到带有www的网址。所以,我试图在.htaccess的最后一行插入这两行:
RewriteCond %{HTTP_HOST} ^example.net
RewriteRule ^ http://www.example.net%{REQUEST_URI} [R=301]
它有效,但现在我可以在URL中看到index.php?/ part。我不希望显示index.php?/ part。
我做错了什么?您是否知道在URL中包含www而不显示index.php?/ part。的方法谢谢。
==================
更新答案:
嘿伙计们,
我将.htaccess修改为:
RewriteEngine On
RewriteBase /
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
RewriteCond %{HTTP_HOST} ^vesteer\.com\.br$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
有效。现在一切都还好。
感谢您的回复。
答案 0 :(得分:1)
好的找到你的解决方案,只需更新你.htaccess代码
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]