php - 仅一个文件的 RewriteRule

标签 php apache .htaccess mod-rewrite

基本上我有下面的 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/

相关文章:

PHP : How to add odd/even loop to my unordered list

php - 在 php/mysql 中使用多个数据库

Javascript:如何在 php 的 while 循环内编写 document.getElementsByClassName()

php - GoDaddy include_path 和 auto_prepend_file

php - json_encode 返回 null

apache - XAMPP - Apache 错误

java - Hadoop 添加数字

php - 伪造 cookie 的 'path' - 通过 .htaccess/javascript/或其他方式?

linux - 通过 htaccess 重定向域 URI

apache - 是否有一种简单、简单、懒惰的方法来针对 Apache 的 mod_rewrite 测试规则?