2

基本上我有下面的htaccess。目前它运行良好,但它会重定向每个文件。例如,当我只想将 about.php 重定向到 /about 时,将 foo.php 重定向到 /foo。基本上我想强制删除 about.php 的 .php 扩展名,但只删除那个文件。

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

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

4

3 回答 3

5
RewriteRule ^about$ about.php [L]

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

至于这个单独的问题:

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

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

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
于 2013-03-16T00:16:10.113 回答
2

我自己修好了。

RewriteCond %{THE_REQUEST} about.php
RewriteRule (.*)\.php$ /$1 [L,R]
RewriteRule ^about$ about.php [L]
于 2013-03-16T11:48:43.273 回答
0

您可以使用重定向规则来做到这一点,这真的很简单。http://httpd.apache.org/docs/2.2/mod/mod_alias.html

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

来自 apache 文档的示例:

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

于 2013-03-16T00:04:32.250 回答