【发布时间】:2011-09-25 13:21:27
【问题描述】:
我有一个使用 .htaccess 进行 URL 路由的 CI 应用程序。我的基本设置如下:
RewriteRule ^$ /var/www/html/ferdy/jungledragon/index.php [L]
RewriteCond $1 !^(index\.php|images|img|css|js|swf|type|themes|robots\.txt|favicon\.ico|sitemap\.xml)
RewriteRule ^(.*)$ /var/www/html/ferdy/jungledragon/index.php/$1 [L]
这些规则对于 CI 应用程序来说是相当标准的。他们将所有 URL(例外列表中的 URL 除外)重写到 index.php 前端控制器。上面的行也隐藏了 index.php,因为它通常会作为每个 URL 的一部分出现。
到目前为止,一切都很好。一切正常。现在,为了搜索引擎优化,我想强制所有流量到 www。所以我将规则扩展如下:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^$ /var/www/html/ferdy/jungledragon/index.php [L]
RewriteCond $1 !^(index\.php|images|img|css|js|swf|type|themes|robots\.txt|favicon\.ico|sitemap\.xml)
RewriteRule ^(.*)$ /var/www/html/ferdy/jungledragon/index.php/$1 [L]
rewritecond %{http_host} ^jungledragon.com [nc]
rewriterule ^(.*)$ http://www.jungledragon.com/$1 [r=301,nc]
最后两行将http://jungledragon.com/anything URL 重写为http://www.jungledragon.com/anything URL。这种工作,但它带回了 index.php 部分:http://jungledragon.com/anything 变为 http://www.jungledragon.com/index.php/anything。
我究竟如何组合这些规则,以使它们不会相互干扰?我尝试在 CI 规则之前进行 WWW 重写。这显示了一个 Apache 301 页面出错,而不是执行实际的重定向。
此外,我还想包括一些规则来消除斜杠,但现在让我们保持简单的问题。请注意,我确实在这里和其他地方找到了有用的帖子,但由于某种原因,我仍然找不到适合我情况的正确语法。
编辑:感谢您的帮助。这有效:
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^jungledragon.com [nc]
rewriterule ^(.*)$ http://www.jungledragon.com/$1 [r=301,nc,L]
RewriteRule ^$ /var/www/html/ferdy/jungledragon/index.php [L]
RewriteCond $1 !^(index\.php|images|img|css|js|swf|type|themes|robots\.txt|favicon\.ico|sitemap\.xml)
RewriteRule ^(.*)$ /var/www/html/ferdy/jungledragon/index.php/$1 [L]
【问题讨论】:
标签: codeigniter mod-rewrite url-rewriting