使用QUERY_STRING时,从URL隐藏index.php和.php

时间:2010-12-23 05:17:03

标签: .htaccess mod-rewrite

我希望能够在使用QUERY_STRING时隐藏我的网址中的index.php和.php。

现在,我在.htaccess中成功隐藏了index.php(访问某些目录时除外):

RewriteEngine On
RewriteCond $1 !^(codex|_core|admin|index\.php) [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L]

我这样做是因为我有某些功能,例如登录/注销/注册,充当网页:example.com/login

但是,我也有一些静态页面,这些页面不会受益于一个带有大量PHP函数的文件...例如example.com/terms-and-conditions.php

本着统一的精神,如何在不破坏example.com/login的情况下将该URL转换为example.com/terms-and-conditions?这甚至可能吗?我已经尝试添加.php删除重写关于index.php删除重写(显然从index.php中删除.php)无济于事。

我确实尝试使用位于here的解决方案,但它打破了example.com/login - 我假设因为我使用函数/查询的方式。我需要改变一些小的东西吗?

1 个答案:

答案 0 :(得分:0)

想出来!只需将两者结合起来,回想起来似乎很明显。 :)

RewriteEngine On

# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.domain\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

RewriteCond $1 !^(codex|_core|admin|index\.php) [NC]
RewriteRule ^(.*)$ /index.php?/$1 [L] 

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]