如何删除中心某处codeigniter中每条路径中的"index.php"
?
我想要干净的非index.php-fied URLs
?
答案 0 :(得分:88)
如果您使用Apache,请在根网站目录中放置一个.htaccess文件,其中包含以下内容:
RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
另一个好的版本位于:
答案 1 :(得分:60)
删除index.php时遇到了一些大问题。作为一般规则,下面的.htaccess已在多台服务器上进行了测试,通常可以正常工作:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
<Files "index.php">
AcceptPathInfo On
</Files>
如果你没有运气,那么下一步就是调整你的配置文件。尝试一些其他URI协议,例如
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
$config['uri_protocol'] = 'ORIG_PATH_INFO';
如果您还没有运气,请尝试更改重写规则以包含您的子文件夹。如果您在开发服务器上使用临时URL等,这通常是一个问题:
RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]
只要玩这些选项,就可以了。另外,请确保您的索引文件设置为:
$config['index_page'] = '';
祝你好运!
答案 2 :(得分:31)
将.htaccess文件与index.php文件一起放在应用程序根目录中。 (检查htaccess扩展名是否正确,Bz htaccess.txt对我不起作用。)
并将以下规则添加到.htaccess文件中,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
然后在application / config / config.php文件中找到以下行
$config['index_page'] = 'index.php';
将变量设置为空,如下所示。
$config['index_page'] = '';
就是这样,它对我有用。
如果它不起作用,请尝试逐个替换以下变量('AUTO','PATH_INFO','QUERY_STRING','REQUEST_URI'和'ORIG_PATH_INFO')
$config['uri_protocol'] = 'AUTO';
答案 3 :(得分:21)
查看system\application\config\config.php
文件,有一个名为index_page
看起来应该是这样的
$config['index_page'] = "index.php";
将其更改为
$config['index_page'] = "";
然后如上所述,您还需要向.htaccess
文件
注意:在CodeIgniter v2中,此文件已从系统文件夹中移出application\config\config.php
答案 4 :(得分:9)
上述所有方法都失败了,然后我发现我没有在 / etc / apache2的虚拟主机文件中将 AllowOverride无更改为 AllowOverride All /位点可用/默认强>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride All <---- replace None with All
</Directory>
<Directory /var/www >
Options Indexes FollowSymLinks MultiViews
AllowOverride All <--- replace None with All
Order allow,deny
allow from all
</Directory>
...
答案 5 :(得分:6)
步骤1 =&gt;将.htaccess文件放在存在应用程序和系统文件夹的根文件夹中。
步骤2 =&gt;如果你的网络路径使用子文件夹,如 - yourdomain.com/project/ - 那么在htaccess文件中使用以下代码
RewriteEngine on
RewriteBase /project/
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /project/index.php/$1 [L]
如果您的网络路径使用root文件夹,例如 - yourdomain.com - 那么在htaccess文件中使用以下代码
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
答案 6 :(得分:6)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]
更改RewriteRule。* index.php / $ 0 [PT,L]后,项目文件夹名称为“codeigniter”。为我工作。谢谢你们的支持。
答案 7 :(得分:5)
想到我可能会添加
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
将是.htaccess并确保以下列方式编辑application / config.php变量:
替换
$config['uri_protocol'] = “AUTO”
与
$config['uri_protocol'] = “REQUEST_URI”
答案 8 :(得分:5)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
这绝对有用..试一试
答案 9 :(得分:4)
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
答案 10 :(得分:4)
确保您已启用mod_rewrite
(我没有)
启用:
sudo a2enmod rewrite
另外,将AllowOverride None
替换为AllowOverride All
sudo gedit /etc/apache2/sites-available/default
最终......
sudo /etc/init.d/apache2 restart
我的.htaccess是
RewriteEngine on
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
答案 11 :(得分:3)
在codeigniter
的url路径中有两种方法可以解决index.php1:在config / config.php中 更改代码:
$config['index_page'] = 'index.php';
到
$config['index_page'] = '';
2:如果未创建,则在根路径中创建.htacess,复制以下代码: -
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
保存它然后检查你的Apache配置rewrite_module或mod_rewrite是否启用。如果没有那么请启用。 (最佳方法)!
答案 12 :(得分:3)
按照CI wiki中this tutorial的说明使用mod_rewrite
。
答案 13 :(得分:3)
这是我的一个CI项目的.htaccess:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /projectFolder/index.php/$1 [L]
最后一行应该为您提供所需的内容,但您可能需要也可能不需要'/ projectFolder',具体取决于您的文件夹结构的设置方式。祝你好运!
答案 14 :(得分:3)
作为.htaccess文件,一个不错的选择是使用Kohana Framework提供的文件:
# Turn on URL rewriting
RewriteEngine On
# Installation directory
RewriteBase /
# Protect hidden files from being viewed
<Files .*>
Order Deny,Allow
Deny From All
</Files>
# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
这是一个经过深思熟虑的.htaccess,只是有效。
答案 15 :(得分:2)
如果您使用的是linux并使用apache2服务器,那么我们可能需要在.htaccess文件的更改旁边覆盖apache2.conf文件。在 /etc/apache2/apache2.conf 上找到apache2配置文件。
搜索目录/ var / www /更改 AllowOverride无 - &gt; AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory
答案 16 :(得分:2)
查看\application\config\config.php
文件,有一个名为index_page
看起来应该是这样的
$config['index_page'] = "index.php";
将其更改为
$config['index_page'] = "";
然后如上所述,您还需要在.htaccess
文件中添加重写规则,如下所示:
RewriteEngine on
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
它对我有用,也希望你。
答案 17 :(得分:2)
我在许多不同的主机上在apache2上测试了这个并且效果很好。
使用此htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
请确保enabled mod_rewirte
phpinfo();
然后在config / config.php中执行此操作:
$config['index_url'] = '';
|
| 'AUTO' Default - auto detects
| 'PATH_INFO' Uses the PATH_INFO
| 'QUERY_STRING' Uses the QUERY_STRING
| 'REQUEST_URI' Uses the REQUEST_URI
| 'ORIG_PATH_INFO' Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';
如果它还不起作用,请尝试将$config['uri_protocol']='AUTO'
更改为第40/54行中列出的application/config/config.php
文件中的一个:
有时我使用:REQUEST_URI
代替AUTO
或"QUERY_STRING"
用于goDaddy托管
答案 18 :(得分:1)
我尝试了很多解决方案,但我想出的是:
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]
这将根据需要从url中删除index.php。
答案 19 :(得分:1)
将.htaccess文件放在根网站目录中
无论你做什么调整 - 如果不符合上述要求 - 它将无效。通常它在System文件夹中,它应该在根目录中。干杯!
答案 20 :(得分:0)
这会对你有所帮助 将此代码粘贴到.htaccess文件中的应用程序文件夹中
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
php_value short_open_tag 1
</IfModule>
答案 21 :(得分:0)
这个给了我完整的魔力:
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]
希望它有所帮助!
答案 22 :(得分:0)
嗨,这个让我感动
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]
以及
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /folder/index.php?/$1 [L]
如果此codeigniter应用程序作为子域托管,则该文件夹是子文件夹的名称 例如domainname / folder / index.php。
希望对你有用。感谢。
答案 23 :(得分:0)
复制.htaccess中的以下代码
RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
答案 24 :(得分:0)
comparingByValue
答案 25 :(得分:0)
第1步:
将此添加到htaccess文件中
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
第2步:
在codeigniter配置中删除index.php
$config['base_url'] = '';
$config['index_page'] = '';
第3步:
允许在Apache配置(命令)中覆盖htaccess
sudo nano /etc/apache2/apache2.conf 并编辑文件并更改为
AllowOverride All
用于www文件夹
第4步:
启用apache mod重写(命令)
sudo a2enmod重写
第5步:
重新启动Apache(命令)
sudo /etc/init.d/apache2 restart