Apache .htaccess重写规则以删除.php文件扩展名

时间:2011-05-19 17:31:08

标签: regex apache .htaccess mod-rewrite redirect

标题解释了基础,现在,问题出现了:

我有很多看起来像这样的文件:

<?php include 'mynavbar.php';   
include 'myheader.php';    
include 'myfirstline.php'; 
include 'mybuttons.php';   
include 'myadvert.php'; 
include 'myimg.php';?>

我无法编辑所有文件并删除.php。如何在地址栏中显示.php,但仍然可以使用.php结尾

来包含网页

3 个答案:

答案 0 :(得分:11)

以下代码应该可以在.htaccess文件中隐藏.php扩展名

Options +FollowSymlinks -MultiViews
RewriteEngine on

# to make `/path/index.php` to /path/
RewriteCond %{THE_REQUEST} ^GET\s(.*/)index\.php [NC]
RewriteRule . %1 [NE,R=301,L]

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC]
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC]

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

另请注意,这些规则会对您的php产生 NO 影响,例如:include 'myheader.php';

这是因为那些包含是由php本身处理的,而不是通过Apache。

答案 1 :(得分:4)

以下RewriteRules将假设任何未匹配的文件的PHP扩展名。它应该位于.htaccess文件中RewriteRules的底部。

# Force PHP extension if not a directory
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^(.*)$ - [L]

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

这是用于URL重写。至于include语句,您仍然需要PHP扩展,因为它们是物理文件路径。如果你需要那些喜欢的东西,你应该看看符号链接。

答案 2 :(得分:0)

您没有采取正确的方法来解决您尝试解决的问题。

如果我理解得很清楚,你想要做的就是拥有一个网址:

http://example.com/my/url

而不是(例如):

http://example.com/my/url.php

如果是这种情况,您应该寻找的是rewrite url