0

我正在尝试使用 .htaccess 从 url 中删除 index.php,但我已经走了一半,我不知道出了什么问题。

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

  • 代码点火器 2.1.4
  • Ubuntu 12.04
  • $config['base_url'] = 'http://localhost/present';
  • 阿帕奇2
  • 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 设置错误?

4

3 回答 3

0

要制作精美的 url,您需要一个内部重写(您有)和一个外部重定向(您没有)。困难的部分不是无限循环。

如果您使用的是 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]
于 2013-08-17T15:20:57.260 回答
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]
于 2013-08-17T16:01:57.327 回答
-1

尝试这个:

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

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

于 2013-08-17T15:04:24.620 回答