为什么这个.htaccess文件mod_rewrite不起作用?

时间:2015-10-15 14:09:35

标签: php apache .htaccess codeigniter mod-rewrite

我正在使用MAMP和CodeIgniter。 我的网站的根目录是:/Users/Roy/Websites/CodeIgniter-3.0.2 在网站文件夹中我还有一些其他项目,但我认为不重要。这是apache httpd.conf文件:http://pastebin.com/Am0ew0C0

在我的.htaccess文件中,我正在使用以下内容:

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

<IfModule authz_core_module>
   Require all denied
</IfModule>
<IfModule !authz_core_module>
   Deny from all
</IfModule>

.htaccess文件位于:/Users/Roy/Websites/CodeIgniter-3.0.2/.htaccess 我不知道为什么mod_rewrite不起作用,它应该在url中消除index.php的使用,因为我现在必须使用的URL是:http://localhost:8888/CodeIgniter-3.0.2/index.php/about

我希望成为:http://localhost:8888/CodeIgniter-3.0.2/about使用PHP版本5.6.10。 apache没有读取.htaccess文件,这是问题,如何解决?

5 个答案:

答案 0 :(得分:1)

问题解决了,没有必要乱用安装了MAMP的httpd.conf。只需获取CodeIgniter并将其放在MAMP内的htdocs文件夹中。之后在CodeIgniter文件夹(而不是那里的应用程序文件夹)中创建一个.htaccess文件,并使用以下代码:

removeActionForKey

现在你有了干净的URL,不再需要使用/index.php/about,但可以做/关于。

答案 1 :(得分:0)

可能是因为您在httpd.conf文件中将文档根目录设置为virtualhosts。我个人会使用.conf如果您计划拥有多个网站,以便每个网站都拥有自己的CodeIgniter-3.0.2,您可以专门为每个网站设置文档根目录。

无论如何,现在您的WebsitesRewriteEngine On RewriteBase /CodeIgniter-3.0.2 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L] 的子文件夹,它是您的文档根目录。所以很可能你的重写基础有问题。

如果您在codeigniter文件夹中有文件和.htaccess,则.htaccess将需要如下所示。

{{1}}

答案 2 :(得分:0)

您可以使用此

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

<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.php
</IfModule>

答案 3 :(得分:0)

看起来像文件权限问题。检查.htaccess文件的属性并更改权限。

尝试使用此代码。

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

更多尝试http://w3code.in/2015/09/how-to-remove-index-php-file-from-codeigniter-url

答案 4 :(得分:0)

.htaccess可能非常令人沮丧。对真正有效的事情采取很多措施

1.你的.htaccess看起来应该是这样的

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /booking/
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>

2.将第3行替换为项目的根目录名,在我自己的情况下&#39; localhost / booking /&#39;

3.将.htaccess文件从应用程序文件夹复制到根目录。这意味着您现在必须在整个项目中使用.htaccess文件的实例。

4.在你的config.php中,Base url在我自己的情况下看起来应该是这样的

$config['base_url'] = 'http://localhost/booking/'

5

$config['index_page'] = '';

6

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

7。通过删除此行前面的#

,打开httpd.conf文件中的Mod-rewrite
LoadModule rewrite_module modules/mod_rewrite.so

我希望这能解决你的问题