首页 > 解决方案 > .htaccess URL 重写特定文件

问题描述

我正在尝试为类似 www.example.com/profile.php?name=username 的内容设置类似 www.example.com/username 的 URL

我在我的 .htaccess 中试过这个

    RewriteEngine on
    RewriteRule ^user/(.*)$ profile.php?name=$1 [NC,B,QSA]

但这使它适用于所有页面。我希望这仅在 URL 类似于 www.example.com/username 时才有效,但它也适用于 www.example.com/users.php

如果 users.php 或任何其他 .php 文件被打开,那么重写规则不应该适用于它。

如何做到这一点?

标签: .htaccessmod-rewrite

解决方案


您可以在请求 uri 上添加重写条件,该条件匹配不以 .php 结尾的所有内容

例如:(未测试)

RewriteEngine on
RewriteCond %{REQUEST_URI} !\.php$
RewriteRule ^user/(.*)$ profile.php?name=$1 [NC,B,QSA]

检查 uri 是否实际上是一个文件在框架中非常流行,但它比以 .php 结尾的字符串匹配要慢,因为每个请求 apache 都需要检查文件是否存在于磁盘上。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/(.*)$ profile.php?name=$1 [NC,B,QSA]

推荐阅读