.htaccess RewriteRule麻烦

时间:2012-01-15 14:33:04

标签: apache .htaccess mod-rewrite

我猜这个问题已被多次询问,但我找不到一个可能会给我我需要的东西。

所以..我可以通过以下网址访问脚本:

http://website.com/index.php/hello/world
http://website.com/hello/world

两者都转到 index.php ,它解析输入(本例中为hello / world)。

这是我的 .htaccess

<IfModule mod_rewrite.c>
Options +FollowSymlinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?path=$1&%{QUERY_STRING} [L]
</IfModule>

然而。当像这样访问网站时:

http://website.com/index.php/hello/world
RewriteRule 输出与 index.php类似的内容?path = index.php / hello / world

我想在 RewriteRule

中的 path = 之后删除 index.php

3 个答案:

答案 0 :(得分:1)

您的.htaccess文件应该如下所示(请注意检查index.php是否是网址的一部分的新规则):

<IfModule mod_rewrite.c>
Options +FollowSymlinks

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index.php/(.*)$ index.php?path=$1&%{QUERY_STRING} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?path=$1&%{QUERY_STRING} [L]

</IfModule>

答案 1 :(得分: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]

答案 2 :(得分:0)

修改Stackoverflow answer的答案以适应此问题

.htaccess:

<IfModule mod_rewrite.c>
Options +FollowSymlinks

RewriteEngine On

# Redirect user
RewriteCond %{THE_REQUEST} ^.*index.php.*
RewriteRule ^(.*)index.php(.*)$ $1$2 [NC,R=301,L]

# Handle the query to PHP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?path=$1&%{QUERY_STRING} [L]

</IfModule>