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

ojsjcaue  于 2022-11-16  发布在  其他
关注(0)|答案(5)|浏览(167)

我使用MAMP和CodeIgniter。我的网站的根目录是:/Users/Roy/Websites/CodeIgniter-3.0.2在Websites文件夹中,我还有一些其他的项目,但我认为这并不重要。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被使用。.htaccess文件没有被apache读取,这是这里的问题,如何修复它?

8zzbczxx

8zzbczxx1#

问题解决了,在安装了MAMP的情况下,不需要修改httpd.conf。只需获取CodeIgniter并将其放在MAMP的htdocs文件夹中。然后在CodeIgniter文件夹(而不是其中的应用程序文件夹)中创建一个.htaccess文件,并使用以下代码:

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

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

pdsfdshx

pdsfdshx2#

这可能是因为你在httpd.conf文件中设置了文档根目录/Users/Roy/Websites/。就我个人而言,如果你计划有多个网站,我会使用virtualhosts,这样每个网站都可以有自己的.conf,你可以为每个网站专门设置文档根目录。
总之,现在你的CodeIgniter-3.0.2Websites的一个子文件夹,Websites是你的文档根目录,所以很可能你在重写库时遇到了问题。
如果您在codeigniter文件夹中有您的文件和.htaccess,您的.htaccess将需要如下所示。

RewriteEngine 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]
c6ubokkw

c6ubokkw3#

你可以用这个

<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>
8fsztsew

8fsztsew4#

看起来像是文件权限问题。请检查.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

rfbsl7qr

rfbsl7qr5#

.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行替换为项目的根目录名,在我自己的例子中为“localhost/booking/”
3.将.htaccess文件从应用程序文件夹复制到根目录中。这意味着您现在在整个项目中必须有.htaccess文件的个示例。
4.in 您的config.php,在我自己的情况下,基本URL应该看起来像这样

$config['base_url'] = 'http://localhost/booking/'
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

7.在httpd.conf文件中打开Mod-rewrite,方法是删除此行前面的#

LoadModule rewrite_module modules/mod_rewrite.so

我希望这能解决你的问题

相关问题