为什么.htaccess url重写不工作codeigniter mamp?

时间:2013-08-14 10:19:43

标签: php .htaccess codeigniter mod-rewrite

[edit]:How to remove "index.php" in codeigniter's path的复制品[那里的解决方案对我不起作用]

我是第一次尝试使用codeigniter而且我还是新手。 我想从我的网址中删除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>

我的重写肯定是打开的,我在我的root中加载了一个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] 

我得到:

enter code here

这也没有用(我知道,他们所有的意思都是做同样的事情):

<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 个答案:

答案 0 :(得分:5)

我用默认的CI索引替换了我自己的索引(也就是说,我将其返回到开箱即用的方式)。
然后我将domain/index.php/pages/view/page.php路由到domain/index.php/page.php
然后我运行了Nishant的.htaccess代码,虽然它似乎不起作用(在通常的网址上显示的网站的静态非风格版本,但没有在index.php的网址上显示)它可能帮助我找到了解。我也将RewriteEngine On改为RewriteEngine 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'] = '';

答案 1 :(得分: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

答案 2 :(得分:1)

希望这会对你有所帮助

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

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

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

如果工作正常,则表示显示codeigniter的欢迎页面,然后您可以考虑通过添加

从网址中删除index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|static)
RewriteRule ^(.*)$ /index.php/$1 [L]

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

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

假设网址为

http://localhost:8888/domain/welcome

将重写为

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

在每种情况下,您的代码都将通过仅包含index.php的网址提供。

答案 3 :(得分:0)

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

将项目文件夹的名称而不是project2更改为您的配置base_url =“”

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