删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时
Posted
技术标签:
【中文标题】删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时【英文标题】:Removing index.php and handling subdomains of two Codeigniter sites, when one within the other 【发布时间】:2013-08-06 22:19:03 【问题描述】:我有两个 Codeigniter 站点,一个位于另一个的子目录中。我需要一些帮助来修改我的 htaccess 文件以从两者中删除 index.php。
第一个站点http://subdomain.domain.com
存储在/home/sites/subdomain/www/html/
中
第二个http://test.subdomain.domain.com
住在/home/sites/subdomain/www/html/app_staging/
这是我来自/home/sites/subdomain/www/html/
的.htacess 文件:
RewriteEngine On
# Rewrite the main domain
RewriteCond %HTTP_HOST !test.subdomain.domain.com
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
# Rewrite the sub domain
RewriteCond %HTTP_HOST test.subdomain.domain.com
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^/(.*)$ /app_staging/index.php?/$1 [L]
这是从第一个站点中删除 index.php,那里一切正常。在第二个站点上,我可以加载默认控制器表单http://test.subdomain.domain.com
,但后续页面从服务器返回 404。我的下一步是什么?
【问题讨论】:
你能试试给定的答案吗?任何反馈将不胜感激。 没有忘记您的答案@HashemQolami,只是调查了我们服务器上 htaccess 的潜在潜在问题。一旦解决了,我会告诉你你的答案如何:) 【参考方案1】:您应该将两个 .htaccess
文件中的每一个都放在它们自己的 CI 根文件夹中。
就个人而言,我更喜欢限制请求的文件和/或文件夹,以防止它们被RewriteRule
处理。
所以,对于位于/home/sites/subdomain/www/html/
的第一个文件:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico|public)
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
另外一个位于/home/sites/subdomain/www/html/app_staging/
:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico|public)
RewriteRule ^(.*)$ /app_staging/index.php/$1 [L]
</IfModule>
注意:如果您不希望RewriteCond
处理它们,则必须将css
和其他文件夹(如public
) 添加到RewriteCond
987654330@.
附带说明:您可能希望通过在每个 .htaccess
文件中使用以下内容来防止目录列表:
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
【讨论】:
以上是关于删除 index.php 并处理两个 Codeigniter 站点的子域,当一个在另一个站点中时的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 编辑 url 并删除查询名称 [关闭]
如何删除 codeigniter 代码中的 index.php?