我的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并且从不保留文件扩展名。非常感谢一些专家的帮助
答案 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。上部链接的最佳答案也显示了不同的方法。只是尝试用您的特定文件名替换它。