我想将使用原始 URL 请求的旧站点的 URL 重定向到我在 CodeIgniter 中实现的新站点。我只是想将它们重定向到我的索引页面。我还想在我的 URL 中去掉“index.php”,这样我的 URL 就可以像 example.com/this/that 一样简单。所以,这是.htaccess
我创建的文件:
RewriteEngine on
Options FollowSymLinks
RewriteBase /
RewriteCond $1 ^assets
RewriteRule ^(.*)$ example/production/$1
RewriteCond %{QUERY_STRING} .+
RewriteRule ^(.*)$ index.php? [R=301]
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/$1
还应该注意的是,我的 index.php 实际上是指向example/production/index.php
.
现在,第一个规则按预期工作 - 我所有的样式和图像都显示得很好,这是我遇到问题的后两个规则。第二条规则基本上是销毁查询字符串并重定向到我的索引页面(外部)。所以,我在 Apache 手册中找到了这个:
注意:查询字符串
模式不会与查询字符串匹配。相反,您必须使用带有 %{QUERY_STRING} 变量的 RewriteCond。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号,即可指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要将新查询字符串与旧查询字符串组合,请使用 [QSA] 标志。
但是,当我尝试访问其中一个旧页面时,我没有重定向到我的索引页面,而是收到 404 page not found 错误。我已经通过将其设置为内部重定向找到了一种解决方法,但我真的希望它是外部的。
下一个问题,也是最让我困惑的一个问题是第三条规则。我希望这会做类似以下的事情。如果我输入:
http://example.com/this/thing
我希望它重新路由到
http://example.com/index.php/this/thing
不幸的是,这不起作用。相反,无论我输入什么,它总是路由到我的索引页面,就好像 URL 中没有其他内容一样(它只是转到http://example.com/
)。
此外,如果我用以下内容替换该规则,我会更加困惑:
RewriteCond $1 !^(index\.php|example|robots\.txt)
RewriteRule ^(.*)$ index.php/this/thing
如果我输入一个 URL,例如http://example.com/other/thing
,那么它会http://example.com/index.php/this/thing
按预期转到,但是如果我输入http://example.com/this/thing
它会转到http://example.com/
(我的索引页)。我无法从中做出正面或反面。任何帮助将不胜感激。