如何从某些规则中排除特定的文件集?

时间:2013-05-30 15:24:03

标签: .htaccess mod-rewrite

我正在尝试将.php上的网址从.php重写为.html,而我还有一些其他规则会干扰我想要做的事情。

下面的代码显示了所有规则,但我有一些平面的PHP页面,我想转换成.html页面。一个例子是history.php到history.html。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /


##Vendor Pages
RewriteRule ^([^/]+)/([^/]+)/([^.]+)\.html?$ vendors2.php?vendorslug=$3&locationslug=$1&categoryslug=$2 [L,QSA,NC]

##Listing Pages
RewriteRule ^([^/]+)/([^.]+)\.html?$ listings.php?locationslug=$1&categoryslug=$2 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !^(.*/)?history\.html$ [NC]
RewriteRule ^([^/.]+)\.html?$ $1.php [L,NC]

##Locations Pages
RewriteRule ^([^/.]+)\.html?$ locations.php?locationslug=$1&Submit=Submit [L,QSA,NC]

目前,代码似乎与其他规则混淆,因为它因为规则而试图将页面作为“位置页面”返回。

我需要将几个页面变成.html(history.php,news.php,maps.php,resources.php,trivia.php等)。

感谢任何建设性的帮助。

1 个答案:

答案 0 :(得分:1)

你可能根本就没有匹配RewriteCond。检查文件是否存在的RewriteCond可能被解释为“文件是/home/username/public_html/history.html.php吗?”,这将失败。

我建议您在规则之前添加几个RewriteCond,而不是在RewriteRule之前用一个##Locations Pages替换它。如下所示:

RewriteRule (history|news|maps|resources)\.html $1.php [L]

请注意,如果你有很多条目,这可能会产生一个loooong线,所以你可以把它分成几个规则。

如果您正在寻找“root”中的请求:

RewriteRule ^(history|news|maps|resources)\.html$ $1.php [L]