可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to access my URL's without index.php
in CodeIgniter. Here is my Blog
controller
class Blog extends CI_Controller {
public function index() {
echo 'hello world';
}
public function about() {
echo 'about page';
}
}
Now I can access index
via http://localhost/codeigniter/index.php/Blog
, but I need to access it with this URL http://localhost/codeigniter/Blog
.
NOTE
I removed index.php from config file
.htaccess
file
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Environment
Windows, XAMPP, PHP Version 5.6.3
回答1:
How to removed index.php from url has been asked so many times, It is the same as what is for codeigniter 2 and 3.
For Xampp With Codeigniter Windows
Find application/config/config.php
Replace This
$config['base_url'] = "";
With This
$config['base_url'] = "your-project-url";
Replace This
$config['index_page'] = "index.php"
With This
$config['index_page'] = ""
In main directory create file called .htaccess
I use code below works fine for me in xampp in windows. More htacces here
Options +FollowSymLinks
Options -Indexes
<FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))">
Order deny,allow
Deny from all
</FilesMatch>
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
Note: make sure your controllers are like example Welcome.php instead of welcome.php also you might need to create new routes in your route.php if remove index.php
回答2:
I just now struggled with this part again, even after being used to Codeigniter for 2+ years.
None of the answers helped me exactly, including the official Codeigniter's page about this, so I'm posting the solution that worked for me.
Enable Rewrite engine
sudo a2enmod rewrite
Change Apache's config file to allow folders to allow overriding of default security setting
sudo nano /etc/apache2/apache2.conf
Under the "Directory" options depending on the location of your files, edit
AllowOverride None
to
AllowOverride All
e.g.: My server files are in "/var/www", so my final result for corresponding Directory options is:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
- Create a ".htaccess" file in the root of your Codeigniter project, i.e.: along with where applications, system folders exist.
In the file, put the following:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
In config/config.php file, change:
$config['index_page'] = 'index.php';
to
$config['index_page'] = '';
Restart apache2:
sudo service apache2 restart
Enjoy!
回答3:
Please change your base_url path which exist in application/config
$config['base_url'] ='localhost/projectname/index.php'
to
$config['base_url'] ='localhost/projectname/'
回答4:
Enable mod_rewrite
restart your apache server
and in your .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
回答5:
To remove index.php
create a .htaccess
file in the same folder as your site’s main index.php file.
Then add the following code to this newly created .htaccess file:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
this code have two parts
1 - remove index.php
2 - redirect all site requests to the index file.
回答6:
Step:-1 Open the folder “application/config”
and open the file “config.php“
. find and replace the below code in config.php
file.
//find the below code
$config['index_page'] = "index.php"
//replace with the below code
$config['index_page'] = ""
Step:-2 Write below code in .htaccess file
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
Step:-3 In some case the default setting for uri_protocol does not work properly. To solve this problem just open the file “application/config/config.php“
, then find and replace the below code
//find the below code
$config['uri_protocol'] = "AUTO"
//replace with the below code
$config['uri_protocol'] = "REQUEST_URI"
回答7:
in config.php
$config['base_url'] = '';
$config['index_page'] = '';
in .htacess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
回答8:
finally this is worked fine for me. i have changed .htaccess
file with this content
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /codeigniter
#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>
And these changes made
$config['index_page'] = "index.php"
//replace with the below code
$config['index_page'] = ""
$config['base_url'] = "your-project-url";
回答9:
Alright, i've been strugling with this for two days, and here is my solution for XAMPP and CodeIgniter 3
Create new ".htaccess" file in root directory (not in CodeIgniter's application folder, where there's another htacces file, don't touch that one), with this inside:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Then, find and change this values on config.php (CodeIgniter file, on config folder):
$config['base_url'] = 'localhost/YourProject';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
Finally, on httpd.conf (Apache config file), find:
#LoadModule rewrite_module modules/mod_rewrite.so
and uncomment the line (remove #).
That's it! Now
localhost/myProject/news
works as if I write
localhost/myProject/index.php/news