删除 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?

Tomcat删除index.php Codeigniter

提交后保留$ _POST数据,同时删除重定向URL中的index.php

如何删除服务器上的“public/index.php”?

如何从 WordPress 网站 URL 中删除 index.php [重复]