如何从URL中删除index.php?

时间:2013-08-17 14:56:16

标签: .htaccess codeigniter mod-rewrite

我正在尝试使用.htaccess从url中删除index.php,我已经走了一半,我无法弄清楚出了什么问题。

我有/使用以下设置/系统:

  • Codeigniter 2.1.4
  • Ubuntu 12.04
  • $config['base_url'] = 'http://localhost/present';
  • apache2的
  • PHP5

当我尝试以下网址时:

http://localhost/present/test它显示页面。到现在为止还挺好。

http://localhost/present/index.php/test它还显示页面,因此我获得了重复的页面。这就是我的问题。

我在index.php。

所在的文件夹中使用以下.htaccess
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

一些友善的灵魂能告诉我什么是错的吗?是mod_rewrite还是某些服务器/ php设置错了?

3 个答案:

答案 0 :(得分:0)

要制作花哨的网址,你需要内部重写(你有)和外部重定向(你没有)。困难的部分不是无限循环。

如果您使用的是Apache 2.3.9或更高版本,则可以使用END标志。

#Redirect
RewriteRule ^index\.php/(.*)$ $1 [R,L]

#Internal Rewrite
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteRule ^(.*)$ index.php/$0 [END]

如果您使用的是较低版本,则需要使用hack-ish解决方法。 THE_REQUEST只会在实际请求中设置,而不是重写。

#Redirect
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php [NC]
RewriteRule ^index\.php/(.*)$ $1 [R,L]

#Internal Rewrite
RewriteRule ^(.*)$ index.php/$0 [L]

答案 1 :(得分:0)

这应该有用。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} !no-redir
RewriteRule ^/?index.php/(.*)$ $1 [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !index\.php
RewriteRule .* index.php/$0?no-redir [L]

答案 2 :(得分:-1)

试试这个:

DirectoryIndex index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

我用它来将所有请求重定向到index.php