基本上我有下面的 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]
现在我有了上面的代码。它现在会导致太多重定向错误。
最佳答案
RewriteRule ^about$ about.php [L]
这是您正确的重写,这意味着对 /about
的请求将被处理为就好像它是对 /about.php
的请求一样>:
至于这个单独的问题:
I don't want the user to see about.php even if he types that in
您需要从 /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]
Does this keep GET params?
如果添加 [QSA]
标志(查询字符串追加),是的。
更新
正如@PeterWooster 所指出的,重定向部分可以简化为:
Redirect /about.php /about
关于php - 仅一个文件的 RewriteRule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15443977/