1

[编辑]:重复如何在 codeigniter 的路径中删除“index.php”
[那里的解决方案对我不起作用]

我第一次尝试 codeigniter,我对 php 还是很陌生。我想从我的网址中删除 index.php。

安装的代码点火
器用我自己的替换了 index.php

我的 .htaccess 中有这个

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

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


#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#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 [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>

我的重写肯定是打开的,我在我的根目录中加载了一个 phpinfo 页面,它显示了加载的模块。我还检查了 httpd.conf

当我从 NetBeans 运行时,我被定向到 localhost:8888/domain/index.php 并且
当我转到 localhost:8888/domain 时我的索引页面加载然后我的 index.php 也加载

当我去 localhost:8888/domain/welcome 或 localhost:8888/domain/welcome.php 我得到 404
The requested URL /index.php/welcome was not found on this server.
当我去 localhost:8888/domain/index.php/welcome 我被定向到欢迎控制器但它只是加载我的 index.php 但没有标记。

我也在 .htaccess 中试过这个:

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

我得到:

在此处输入代码

这也不起作用(我知道,他们都打算做几乎相同的事情):

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /
    # Hide the application and system directories by redirecting the request to index.php
    RewriteRule ^(application|system|\.svn) index.php/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [QSA,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>

我在 config/config.php 中有:

 $config['base_url']    = 'localhost:8888/domain.com/';
    $config['index_page'] = '';
4

4 回答 4

5

我用默认的 CI 索引替换了我自己的索引(也就是说,我将它恢复为开箱即用的方式)。
然后我路由domain/index.php/pages/view/page.phpdomain/index.php/page.php
我然后运行 ​​Nishant 的 .htaccess 代码,虽然它似乎没有工作(静态的非样式版本的网站显示在通常的 url 但不是在没有 index.php 的 url 上)它可能有帮助给我一个解决方案。
我也改成RewriteEngine OnRewriteEngine on虽然我很确定我以前尝试过。在这些步骤之后,我又回到了 sbaaaang 建议的代码(这有点像以前尝试过的版本 id),这次它起作用了。

对于可能遇到 .htaccess 麻烦的任何其他人,我建议在它们开箱即用并通过 tutes 时留下它们(而不是像我那样跳进去)。

我的 .htaccess 就这样结束了

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


<Files "index.php">
AcceptPathInfo On
</Files>  
</IfModule>

<IfModule !mod_rewrite.c>

ErrorDocument 404 /index.php
</IfModule>

和配置变量,如:

$config['base_url'] = '';
$config['index_page'] = '';
于 2013-08-17T04:13:37.717 回答
2
 $config['base_url']    = 'http://'.$_SERVER['HTTP_HOST'].'/';
 $config['index_page'] = '';

然后.htaccess:

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

我还注意到您说“用我自己的替换 index.php”这是错误的,请将原始 Codeigniter index.php 文件留在主根目录中,否则您将永远不会运行 codeigniter:D

于 2013-08-14T12:41:52.140 回答
1

希望对你有帮助

您面临的问题是因为您删除了 index.php 并将其替换为您自己的 index.php。

而是将 codeigniter 文件夹放在您的 localhost 中,并将 index.php 放在 [本地主机的根目录下,然后在浏览器中打开以下 url。

http://localhost:8888/domain/index.php/welcome

如果它工作正常,意味着显示你的 codeigniter 的欢迎页面,那么你可以考虑从你的 url 中删除 index.php,通过添加

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

在你的 .htaccess 文件中,第二行重写条件将确保重写规则不会执行,当 url 中有 index.php 或 static 时,使用 static 可以将所有静态内容放在 static 文件夹中。

现在当 url 中没有 index.php 或 static 时,重写规则将重写它。

假设网址是

http://localhost:8888/domain/welcome

将被改写为

http://localhost:8888/domain/index.php/welcome

在任何情况下,您的代码都将通过仅包含 index.php 的 url 提供。

于 2013-08-15T06:16:38.850 回答
0

试试这个非常简单的代码,它对我来说很好用:

把你的项目文件夹的名称而不是 project2 更改你的配置 base_url=" "

RewriteEngine on
RewriteCond $1 !^(index\.php|uploads|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /project2/index.php/$1 [L]
于 2013-08-14T10:54:57.580 回答