通过htaccess从url中删除index.php

时间:2013-12-19 04:04:09

标签: php apache .htaccess mod-rewrite

我正在开发一个php框架工作,我是.htaccess规则的新手。所以我需要重定向 网址使用.htaccess。网址是

http://localhost/rinocabs/index.php?/Galary/Image/

应转换为此

http://localhost/rinocabs/Galary/Image/

在.htaccess文件中我包含这些规则

Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^localhost/rinocabs/index.php?/Galary/Image/ [nc]
rewriterule ^(.*)$ http://localhost/rinocabs/Galary/Image/$1 [r=301,nc]

但它不起作用。请帮助。

4 个答案:

答案 0 :(得分:4)

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA]

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

使用此

  

本地主机/ rinocabs / index.php的/ Galary /图像/

而不是

  

本地主机/ rinocabs /的index.php?/ Galary /图像/

答案 1 :(得分:0)

When in doubt, go the Codeigniter route!

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

基本上没有理由在重写规则和条件中包含你网址的域名部分,你的情况看起来很时髦。看看上面的codeigniter示例,我们在表达式中需要做的就是:在路径中找到index.php段,然后去除它,并重写以包含它。你的表达式假定路径总是相同的...如果这是有道理的。

答案 2 :(得分:0)

请尝试以下代码:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

答案 3 :(得分:0)

请尝试以下代码。它运作正常。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]