10

我在 Local WAMP中使用 Codeigniter 。这里的代码工作正常。但是我在 Cpanel 中上传(在 example.com 内部,文件夹名称调用' mysite')。在那里我改变了,

  • db_name (config/database.php)
  • db_user_name (config/database.php)
  • db_password (config/database.php)
  • base_url 作为http://example.com/mysite (config/config.php)
  • uri_protocol 作为 REQUEST_URI (config/config.php)

.htaccess并且还将(mysite/.htaccess)更改为,

<IfModule mod_rewrite.c>

RewriteEngine On

# Set the rewritebase to your CI installation folder
RewriteBase /mysite/


# Send everything to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

但不在 mysite/application/.htaccess 中。它是空的。

问题是,如果我去http://example.com/mysite,它会正确显示默认页面。但是,如果我单击任何链接(http://example.com/mysite/user/signin),它会显示相同的默认页面。但网址已更改。

请帮帮我...

配置文件

$config['base_url'] = 'http://example.com/mysite';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
$config['url_suffix'] = '';
$config['language'] = 'english';
$config['charset'] = 'UTF-8';
$config['enable_hooks'] = FALSE;
$config['subclass_prefix'] = 'MY_';
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
$config['allow_get_array']      = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger']   = 'c';
$config['function_trigger']     = 'm';
$config['directory_trigger']    = 'd';
$config['log_threshold'] = 0;
$config['log_path'] = '';
$config['log_date_format'] = 'Y-m-d H:i:s';
$config['cache_path'] = '';
$config['encryption_key'] = '***';
$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
$config['global_xss_filtering'] = FALSE;
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['compress_output'] = FALSE;
$config['time_reference'] = 'local';
$config['rewrite_short_tags'] = FALSE;
$config['proxy_ips'] = '';
define('CSS_FOLDER' , 'application/assets/css');
define('DEFAULT_IMAGE_URL' , 'application/assets/images/default');

路由.php

$route['default_controller'] = "welcome";
$route['404_override'] = '';
$route['user/(:any)'] = 'user/index';
4

15 回答 15

7
$config['base_url'] = 'http://example.com/mysite/';

优于:

$config['base_url'] = 'http://example.com/mysite';

尝试这个 :

RewriteBase /

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /mysite/index.php/$1 [L]
于 2013-07-26T08:23:49.450 回答
4

我遇到了同样的问题..当我使用它时解决了

$config['uri_protocol'] = 'AUTO'; 

在 config.php ..尝试使用 AUTO 和 PATH_INFO 相同

确保 rewrite_module 在 apache 中打开

于 2013-07-26T13:20:59.260 回答
3

.htaccess 代码

将默认配置恢复为 config.php,希望对您有所帮助。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
于 2013-07-23T09:55:46.080 回答
1

如果您打算在服务器上使用子文件夹,请在本地 WAMP 上执行相同操作。这样,您可以在将其发送到服务器之前对其进行测试。

我很久以前使用 CI,但我认为您必须添加mysite/一些配置文件。

请参阅:在子文件夹中安装 CodeIgniter 应用程序

于 2013-07-16T13:11:32.877 回答
1

有时“ORIG_PATH_INFO”可以解决这个问题。因此,您也可以将 uri_protocol 更改为“ORIG_PATH_INFO”再试一次

$config['uri_protocol'] = "ORIG_PATH_INFO";

并且 base_url 应该是绝对的,

$config['base_url'] = "http://example.com/mysite/";
于 2013-07-23T11:32:32.923 回答
1

可以告诉 CodeIgniter 在 URI 不存在时加载默认控制器,就像只请求您的站点根 URL 时的情况一样。因此,一旦在 routes.php 中用您的控制器替换默认控制器“欢迎”,它可能会有所帮助你

于 2013-07-23T12:50:14.147 回答
1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
于 2013-07-23T13:10:06.323 回答
1

试试这个htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /mysite/index.php/$1 [L]

此外,您应该已经创建了名为 user 的控制器,并且该控制器应该具有功能登录。

于 2013-07-24T08:54:30.233 回答
1

我使用了以下 .htaccess 文件,它适用于我的 cpanel。

# index file can be index.php, home.php, default.php etc.
DirectoryIndex index.php

# Rewrite engine
RewriteEngine On

# condition with escaping special chars
RewriteCond $1 !^(index\.php|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
于 2013-07-25T06:18:17.307 回答
1

消除

$route['user/(:any)'] = 'user/index';

在您的 routes.php 文件中。用户/登录符合上述条件,这就是为什么 CI 将请求路由到用户/索引而不是您的“用户”控制器“登录”功能。

您想通过该路由配置实现什么目标?

于 2013-07-25T11:24:17.527 回答
1

打开 config.php 并执行以下替换

$config['index_page'] = "index.php"
to
$config['index_page'] = ""

在某些情况下,uri_protocol 的默认设置无法正常工作。只需将 $config['uri_protocol'] ="AUTO" 替换为 $config['uri_protocol'] = "REQUEST_URI"

HTACCESS

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
于 2013-07-25T13:18:07.567 回答
1

不要在 .htaccess 文件中写入任何内容并删除 $route['user/(:any)'] = 'user/index'; 行和一件非常重要的事情,确保我应该启用您的服务器 mod 重写扩展。

这可以帮助你如何在共享主机上的 php.ini 中启用 mod_rewrite

于 2013-07-28T04:34:39.207 回答
1

我通过将控制器文件名更改为以大写字母开头解决了同样的问题。

就像下载的默认“欢迎”控制器一样。

于 2015-06-29T16:34:29.170 回答
0

您需要考虑的事项很少。当您使用 codigniter 框架设置项目时。以下是您必须进行更改的文件。

1).htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mysite/index.php/$1 [L]  

2)应用程序/config/config.php

$config['base_url'] = 'http://example.com/mysite/';
$config['server_root'] = $_SERVER['DOCUMENT_ROOT'];
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';  

3)应用程序/配置/数据库.php

$db['default']['hostname'] = 'localhost'; // set your hostname
$db['default']['username'] = 'root'; // set database username
$db['default']['password'] = 'root'; //set database password
$db['default']['database'] = 'XYZ'; //set your database name
$db['default']['dbdriver'] = 'mysql';

4)application/config/routes.php

$route['default_controller'] = "user";  //your default controller
$route['404_override'] = '';  

注意:您的.htaccess文件必须在根目录中。这里它应该在mysite文件夹中

于 2013-07-30T07:38:59.580 回答
0

尝试这个

$config['uri_protocol'] = 'PATH_INFO';
$config['enable_query_strings'] = FALSE;

访问

<IfModule mod_rewrite.c>
RewriteEngine On

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [NC]
</IfModule>
于 2017-03-11T04:51:09.057 回答