我正在尝试使用.htaccess从url中删除index.php,我已经走了一半,我无法弄清楚出了什么问题。
我有/使用以下设置/系统:
$config['base_url'] = 'http://localhost/present';
当我尝试以下网址时:
http://localhost/present/test
它显示页面。到现在为止还挺好。
http://localhost/present/index.php/test
它还显示页面,因此我获得了重复的页面。这就是我的问题。
我在index.php。
所在的文件夹中使用以下.htaccessRewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
一些友善的灵魂能告诉我什么是错的吗?是mod_rewrite还是某些服务器/ php设置错了?
答案 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