.htaccess URL重写 - strip .php后缀

时间:2015-03-31 19:05:00

标签: apache .htaccess

我想重写这样的网址:

http://domain.com/category.php?id=xx

为:

http://domain.com/category/?id=xx

另外,我想隐藏index.php。我怎样才能用.htaccess实现这个目标?以下代码不起作用:

##REDIRECTS-START

##REDIRECTS-END

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(ADMIN.*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
### ROOT DIR TO PROJECT
RewriteRule . wallkill/index.php [L]

感谢。

2 个答案:

答案 0 :(得分:1)

试试此代码

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

参考link

答案 1 :(得分:0)

您需要2套规则。第一组将浏览器重定向到最后没有.php的请求,然后在内部重写.php 返回。第二条规则将浏览器重定向到没有index.php的请求。

类似于:

RewriteEngine On

RewriteCond %{THE_REQUEST} \ /+(.*)index\.php
RewriteRule ^ /%1 [L,R]

RewriteCond %{THE_REQUEST} \ /+([^\?]+)\.php
RewriteRule ^ /%1/ [L,R]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]

请注意,当您将/个结尾斜杠添加到结尾时,您的相对网址会更改,并且所有相关链接都会中断。要解决此问题,请确保所有链接都是绝对的(以/http://开头)或在所有网页的标题中添加相对基数:

<base href="/" />