仅限一个文件的RewriteRule

时间:2013-03-16 00:01:16

标签: php apache .htaccess mod-rewrite

基本上我有下面的htaccess。在它完美运行的那一刻,它会重定向每个文件。例如foo.php到/ foo,我只希望它将about.php重定向到/ about。基本上我想强制删除.php扩展名为about.php,但只删除该文件。

RewriteRule ^about$ about.php [L]
RewriteCond %{REQUEST_URI} ^/about.php$ [NC]
RewriteRule .* /about [R,L]

现在我有了上面的代码。它现在导致重定向错误太多。

3 个答案:

答案 0 :(得分:3)

RewriteRule ^about$ about.php [L]

这是您正确的重写,这意味着对/about的请求将被处理,就好像它是对/about.php的请求一样:

至于这个单独的问题:

  

我不希望用户看到about.php,即使他在

中输入了

您需要从/about.php/about重定向。这就是你的第二行和第三行所做的(重定向带有[R]标志的RewriteRule),但条件是广泛的,还包含一些流畅的东西:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

将其更改为:

RewriteCond %{REQUEST_URI} ^/about.php$ [NC]
RewriteRule .* /about [R,L]
  

这是否保持GET参数?

如果添加[QSA]标志(查询字符串追加),是。

<强>更新

正如@PeterWooster指出的那样,重定向部分可以简化为:

Redirect /about.php /about

答案 1 :(得分:2)

我自己修好了。

RewriteCond %{THE_REQUEST} about.php
RewriteRule (.*)\.php$ /$1 [L,R]
RewriteRule ^about$ about.php [L]

答案 2 :(得分:0)

您可以使用重定向规则来执行此操作,这非常简单。 http://httpd.apache.org/docs/2.2/mod/mod_alias.html

编辑: 这会导致服务器向客户端发送重定向,如果使用301状态,这对于移动站点时的SEO特别有用。

来自apache docs的示例:

重定向/服务http://foo2.example.com/service