重写.htaccess中的URL,以便将查询参数替换为正斜杠(id?=value)

cxfofazt  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(104)

我已经确保重写引擎是启用的,并删除.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]
5ssjco0h

5ssjco0h1#

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

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]
bbuxkriu

bbuxkriu2#

您可以在/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是在第二个规则中跳过重写现有文件和目录。

相关问题