微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重写 .htaccess 中的 URL,用正斜杠id?=value替换查询参数

如何解决重写 .htaccess 中的 URL,用正斜杠id?=value替换查询参数

我已确保启用了重写引擎并且删除了 .PHP 扩展名正在工作,所以我知道这不是问题。

我想要做的只是删除 URL 的 ?id=value 方面,因此基本上使 URL 看起来像这样:

folder/medias/value

代替

folder/medias?id=value

我当前的 .htaccess 如下所示:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.PHP -f
RewriteRule ^(.*)$ $1.PHP [NC,L]

RewriteRule ^404/?$ /404.PHP [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^ 404.PHP [L,R]

解决方法

根据您显示的示例/尝试,请尝试遵循 htaccess 规则。在测试您的网址之前,请务必清除浏览器缓存。

RewriteEngine ON
##Rules for external rewrite.
RewriteCond %{THE_REQUEST} \s/([^.]*)\.php\?id=(\S+)\s [NC]
RewriteRule ^ /%1/%2? [R=301,L]
##Rule for internal rewrite.
RewriteRule ^([^/]*)/([^/]*)/?$ $1?id=$3 [L]
,

您可以在 /folder/.htaccess 中尝试此代码(如果该文件不存在,则创建此文件):

RewriteEngine On

# External redirect from /folder/media?id=val to /folder/media/val
RewriteCond %{THE_REQUEST} /(\S+?)\.php\?id=([^&\s]+)\s [NC]
RewriteRule ^ /folder/%1/%2? [R=301,L,NE]

# Internal rewrite from /folder/media/val to /folder/media?id=val
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1.php?id=$2 [L,QSA]
  • 第一条规则中的尾随 ? 是从原始 URL 中删除查询字符串。
  • %{REQUEST_FILENAME} !-f%{REQUEST_FILENAME} !-d 是在第二条规则中跳过现有文件和目录的重写。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。