基本上我有下面的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]
现在我有了上面的代码。它现在导致重定向错误太多。
答案 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的示例: