0

我正在使用带有别名作品的 MAMP。Codeigniter 位于localhost/works/project/web

如果没有 index.php,控制器将无法工作 ( localhost/works/project/web/index.php/auth/register)

$config['base_url'] = 'localhost/works/project/web/'; //with http://

$config['index_page'] = '';

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

(我为uri_protocol尝试了所有这些)

我在 /User/me/works/project/web/ 创建并编辑了 .htaccess 文件,我厌倦了关于这个问题的所有 .htaccess 文件。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Users/me/works/project/web

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

#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
#This last condition enables access to the images and css folders, and the robots.txt file
#Submitted by Michael Radlmaier (mradlmaier)
RewriteCond $1 !^(index\.php|images|robots\.txt|css)
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>

创建错误,即: [error] [client ::1] File does not exist: /Users/me/works/project/web/auth

当我使用 RewriteBase /

mod_rewrite 在 phpInfo 中处于活动状态。

我找不到解决方案。

4

8 回答 8

3

RewriteBase错了。它不应该是您服务器的相对文件路径,它应该是您的重写规则等的相对 URL 路径。更多信息在这里。

如果您曾经使用过 HTML 的<base>标签,那么原理几乎相同。如果您的主 localhost URL 是http://localhost,并且您的项目在子文件夹http://localhost/my-project中,那么您将使用RewriteBase /my-project/.

如果您没有使用 RewriteBase,并且您的项目位于子文件夹中,则必须将该子文件夹添加到您的每个 URL 和重写中,如下所示:

RewriteRule ^(.*)$ /my-project/index.php/$1 [L]

深思熟虑:

  • 尽可能简单地启动您的 .htaccess 文件。您立即投入的越多,出错的可能性就越大,调试起来就越困难。特别是如果您是 .htaccess 文件的菜鸟。不要盲目地复制和粘贴——弄清楚事情实际上做了什么。

  • 系统文件夹访问部分现在是多余的——系统文件夹有自己的 .htaccess 来限制请求,就像应用程序文件夹一样。

于 2013-03-15T01:25:04.090 回答
1

1.在 application/config.php 文件中进行以下更改

$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';

2.在 .htaccess 文件中使用它:

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

并使用以下命令启用重写模式

 a2enmod rewrite

并编辑文件 /etc/apache2/sites-enabled/000-default

change the AllowOverride None to AllowOverride All.

最后重启你的服务器

于 2013-02-27T05:04:32.780 回答
0

您当然没有打开 mod_rewrite 或者您没有使用 MAMP 安装它

打开您的 httpd 配置文件并更改

# AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

AllowOverride All

取消注释这一行:

#LoadModule rewrite_module libexec/apache2/mod_rewrite.so 

还要在此处对用户进行一些更改:/etc/apache2/users/username.conf

LoadModule php5_module        libexec/apache2/libphp5.so

DocumentRoot "/Users/username/where/ever/you/like"

<Directory "/Users/username/where/ever/you/like">
    Options Indexes MultiViews +FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

在此处获取更多信息http://adam.merrifield.ca/2010/08/09/apache-mod_rewrite-php-and-os-x-10-6-snow-leopard/


重启 MAMP


要了解 mod_rewrite 是否打开,请按照 Stackoverflow 中的答案进行操作:

如何检查是否在 php 中启用了 mod_rewrite?


只是为了确保您的 .htaccess 不是问题,您可以试试这个。它已经过测试:

<IfModule mod_rewrite.c>

    RewriteEngine on
    RewriteBase /Users/me/works/project/web/

    # If the start of the URL doesn't match one of these...
    RewriteCond $1 !^(index\.php|robots\.txt|assets|cache|themes|uploads|css|images|js)

    # Route through index.php
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

上面授予了对某些文件夹的访问权限,并且 rewritebase 有一个尾部斜杠。


确保您有任何其他嵌套的 .htaccess 覆盖这个。

于 2013-02-26T16:35:45.693 回答
0

在您的虚拟主机上使用AllowOverride All :

<Directory "/path/to/your/site">
    ....
    AllowOverride All
</Directory>
于 2013-11-15T03:33:57.750 回答
0

我已经将 codeigniter 安装在如下格式的 url 中:http: //11.12.34.45/~project/

我尝试了不同的建议,最后这个以下网址提供了解决方案:

https://ellislab.com/expressionengine/user-guide/urls/remove_index.php.html

于 2015-03-02T12:34:13.923 回答
0

我没有使用.htacces 解决了这个问题,而是将它们写入httpd.conf。我检查了 AllowOverride is All 但我不确定为什么 .htaccess 不起作用。因为我在这个问题上浪费了太多时间,所以我将使用这种方式。感谢您的回答。

于 2013-02-27T09:52:56.210 回答
0

打开你的 httpd 配置文件 LoadModule rewrite_module modules/mod_rewrite.so 然后AllowOverride All

          <Directory "C:/xampp/htdocs"> //example for xampp
               Options Indexes FollowSymLinks Includes ExecCGI
               AllowOverride All
               Order allow,deny
               Allow from all
           </Directory>
于 2013-12-24T17:16:38.323 回答
0

需要修改Apache的两个文件,httpd.conf httpd-vhosts.conf

在 httpd.conf 中改变它

<Files ".ht*">
Require all denied
</Files>

至,

<Files ".ht*">
Require all granted
</Files>

并在 httpd-vhosts.conf 中添加以下代码,

<VirtualHost *:8000>
ServerName localhost
DocumentRoot c:/wamp64/www
<Directory  "c:/wamp64/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
    AllowOverride All
    Allow from all
</Directory>
</VirtualHost>
于 2017-11-24T06:46:57.087 回答