2012-03-22 56 views
3

htaccess删除我的网站文件的.php扩展名。删除.php扩展名(明确书写)友好的URL

RewriteEngine on 
RewriteBase/
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteRule ^(.*)$ $1.php [L,QSA] 

现在,如果我去我的网站

www.mysite.com/home 

正常工作,它重定向到home.php但网址仍然友好。

但如果我写这篇文章的网址:

www.mysite.com/home.php 

的home.php供应和URL并不友好。

我该如何避免这种行为?我希望如果用户写www.mysite.com/home.php,URL地址栏中显示的URL为www.mysite.com/home

回答

4

你可以请求删除.PHP像这样

RewriteCond %{REQUEST_URI} ^/(.*).php$ 
RewriteRule ^(.*)$ %1 [L,QSA] 
+1

这个问题的部分工作。我的主要问题是,如果用户引入了mysite.com/file.php,我希望URL被重写为mysite.com/file – miquel 2012-03-22 12:56:22

+0

是的,上面会将'mysite.com/file.php'重定向到'mysite。 COM /文件“ - 然后意识到无限循环 - http://stackoverflow.com/questions/7823801/remove-php-extention-stop-access-of-url-with-php-extention-and-remove-trailing – scibuff 2012-03-22 13:05:42

+0

谢谢@scibuff。但是可以更改浏览器的URL吗?我仍然无法修改它。 – miquel 2012-03-22 13:25:46

0

您的重写被忽略,因为它检查现有的文件,根据您的规则:

RewriteCond %{SCRIPT_FILENAME} !-f 

我会建议在php中添加一个URL检查重定向到自己(没有扩展名)。或者如果有人访问现有文件,你想显示404错误?

+0

如果我删除的RewriteCond,会是怎样的效果呢?我没有看到任何区别。有没有一个正确的方法来做到.htaccess,而不是重定向在PHP? – miquel 2012-03-22 12:54:12

+0

它会将所有流量路由到您的文件..但是因为我怀疑您会有类似home.php.php的东西,它会导致404。那么apache不能告诉浏览器将导航中的URL更改为更清洁的东西。国防部重写只是将一个URL请求转换为其他人。所以你必须说明你想要什么逻辑 - 重定向或仍然提供页面..或404 – 2012-03-22 12:56:28

5

你也可以把这个代码的.htaccess文件里:

options +multiviews 

这样做是搜索可用扩展(。 HTML,.htm和.php我认为)在当前目录中。因此,例如,如果您要求/user它会寻找user.php

+0

你的答案肯定是他想要的最好的答案:) – 2012-03-23 09:17:07

+0

Humm,也许不是。如果我放置/用户,那么一切正常,它会重定向到/user.php。但是,如果我把/user.php,我想浏览器的网址也更改为/用户,这就是我想要做的。 – miquel 2012-03-23 17:22:58

+0

你可以添加一个'htaccess'规则来将所有'* .php'重定向到'*',如下所示:'rewriterule ^(。*)\。php $ $ [r = 301,l]'。 (我目前无法测试它,但它应该可以工作)。 – 2012-03-23 21:31:15

8

代码

RewriteEngine On 
RewriteBase/

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


# remove index 
RewriteRule (.*)/index$ $1/ [R=301] 

# 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] 
+0

花费数小时尝试如此多的解决方案,你的作品,并且评论很好。谢谢! – SharkBytes 2016-05-28 04:12:14