Codeigniter奇怪的问题,一些链接与尾部斜线工作有些不

Wat*_*ame 1 .htaccess codeigniter

我有一个奇怪的问题.我有一个Codeigniter应用程序,它在我的本地机器上完美地工作,但在远程服务器它没有.以下是场景

  1. 某些带有尾部斜杠的链接可以正常工作,但没有斜杠显示Firefox中的"连接已重置"错误.

  2. 某些链接没有尾部斜杠,但是WITH尾部斜杠显示Firefox中的"连接已重置"错误.

我确信编码没有错误,因为.我认为罪魁祸首是.htaccess文件.以下是我的.htaccess文件

RewriteEngine on
RewriteBase /demo/
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.谢谢!

小智 6

我相信你的问题是缺少'?' 在这条线上:

RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

添加这个'?' 直接在'index.php'之后

RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

另外,根据我的经验,我会在RewriteBase上留下尾随斜杠,并将其添加到$ config ['base_url']参数中,让CI为您执行此操作:

$config['base_url'] = 'http://yourwebsite.com/demo/';
-instead of-
$config['base_url'] = 'http://yourwebsite.com/demo';
Run Code Online (Sandbox Code Playgroud)

这是.htaccess设置我已经使用了一段时间与CI,它很好地服务于我:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase / # TODO: add a folder name here if the application is not in web root

  RewriteCond %{REQUEST_URI} ^system.*
  RewriteRule ^(.*)$ /index.php?/$1 [L]

  RewriteCond %{REQUEST_URI} ^application.*
  RewriteRule ^(.*)$ /index.php?/$1 [L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
  # If we don't have mod_rewrite installed, all 404's
  # can be sent to index.php, and everything works as normal.
  # Submitted by: ElliotHaughin

  ErrorDocument 404 /index.php
</IfModule> 
Run Code Online (Sandbox Code Playgroud)