删除文件扩展名php除了一个文件

时间:2016-07-01 07:52:00

标签: regex apache .htaccess ubuntu

我的htaccess文件完全删除了所有php文件中的所有文件扩展名,但是我需要将文件/页面booking.php从中排除并加载.php扩展名。实现这一目标的最佳方法是什么?我在Ubuntu 14.04上使用Apache 2.4.7

我当前的htaccess文件:

    <IfModule mod_rewrite.c>

     Options +FollowSymLinks -MultiViews -indexes
     RewriteEngine On
     RewriteBase /

     RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
     RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]

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

     # remove index
     RewriteCond %{THE_REQUEST} /index(\.php)?[\s?/] [NC]
     RewriteRule ^(.*?)index(/|$) /$1 [L,R=301,NC,NE]

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

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

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

     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule (?!^sections/)^(.+)$ /sections/$1 [L,NC]

    </IfModule>

我尝试了一些方法但是没有结果,总是导致404并且从不保留文件扩展名。非常感谢一些专家的帮助

3 个答案:

答案 0 :(得分:1)

根据您的需要,您可以在开始时退出规则链,从而排除filebooking.php任何重写

RewriteRule ^booking\.php$ - [L]

请参阅RewriteRule

  

- (破折号)
  短划线表示不应执行替换(现有路径未经过触摸传递)。当需要在不改变路径的情况下应用标志(见下文)时使用。

如果不是每条规则,另一种方法是为每个相关规则添加RewriteCond前缀并排除filebooking.php

RewriteCond %{REQUEST_FILENAME} !booking\.php

答案 1 :(得分:1)

将以下规则置于顶部(下方RewriteEngine

RewriteRule ^filebooking\.php$ - [L]

filebooking.php将通过-目标继续传递。

答案 2 :(得分:0)

有点谷歌搜索给了我解决这个问题的可能方法,见SO-post

RewriteCond %{REQUEST_URI} !^(.*/)?index\.php$ [NC]

在上面的例子中,用户想要排除他的index.php。上部链接的最佳答案也显示了不同的方法。只是尝试用您的特定文件名替换它。