【问题标题】:.htaccess rewrite to subfolder with codeigniter rewrite.htaccess 使用 codeigniter rewrite 重写到子文件夹
【发布时间】:2013-04-16 16:57:18
【问题描述】:

我的网站需要存在于子文件夹中

example.com/site

但我正在尝试使用 .htaccess 删除任何包含 www 的链接(以确保 codeigniter csrf 不会引发错误),所以我添加了

RewriteCond %{HTTP_HOST} ^(www\.example\.com)?$
RewriteRule ^(.*)$ http://example.com/site/$1 [R=301,L]

这在指定了页面标识符的情况下效果很好,所以

www.example.com/site/book rewrites to example.com/site/book

但是当没有指定页面标识符时,我得到一个 404

www.example.com/site rewrites to example.com/site//usr/local/pem/vhosts/103480/webspace/httpdocs/new

我想知道是否有人能指出我正确的方向?

这是我的完整 .htaccess

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.example\.com)?$
RewriteRule ^(.*)$ http://example.com/site/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

【问题讨论】:

  • site 子目录中是否有额外的 htaccess 文件?
  • 是的,有问题的 .htaccess 位于 site 子目录中,抱歉,我应该更清楚。 faa 的更新答案虽然解决了我的问题

标签: .htaccess codeigniter mod-rewrite codeigniter-2


【解决方案1】:

你可以试试这个:

RewriteCond %{HTTP_HOST} ^www\.    [NC]
RewriteCond %{REQUEST_URI} ^/(.*)  [NC]
RewriteRule .*  http://example.com/%1 [R=301,L]

【讨论】:

  • 感谢您的回答。您的建议不包括重定向到子文件夹,当我将其添加回 RewriteRule ^(.*) http://example.com/site/$1 [R=301,L] 时,它会在尝试访问 www.example.com/site 时重写为问题中提到的相同 url
  • 我的答案中的代码从请求中删除了www。就这样。现在,您是否要将所有内容重定向到目录/site?如果是这样,您必须首先确保请求不是针对/site。如果您更详细地解释您想要什么,我可以更新我的答案。
  • 我想将请求重定向为:www.example.com/site => example.com/site 和 www.example.com/site/book => example.com/site/book 什么我有第二种情况的作品,但第一种情况没有
  • 嗯,这正是我答案中的代码所做的。只需删除 www 并按要求保留 URI 路径。您无需添加任何内容。用我的回答替换您问题中的前 2 行。
  • 就是这样!再次感谢您的时间(和耐心!)
【解决方案2】:

也许,你只是错过了RewriteBase

根据.htaccess 文件的位置,尝试任一

RewriteBase /

RewriteBase /site

从不在启用 301 的情况下进行测试,请参阅此答案 Tips for debugging .htaccess rewrite rules 了解详情。

【讨论】:

  • 感谢 olaf 的链接,这将是我在这方面尝试和改进的好读物
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 2011-03-02
  • 2011-10-07
  • 2023-03-26
  • 2012-09-07
  • 2011-08-05
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多