删除扩展但保留参数

时间:2017-05-12 20:29:04

标签: .htaccess mod-rewrite

我一直在想,如何删除扩展但保留网址的参数?例如:search.php?q=test变为/search?q=test

我尝试了以下操作,但它从网址中删除了整个search.php

RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteCond %{REQUEST_FILENAME} search
RewriteRule ^ %1/ [NC,L,R]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} search
RewriteRule ^([^/]+)/?$ $1.php [NC,L]

提前谢谢!

1 个答案:

答案 0 :(得分:0)

要删除扩展名,通常会检查所请求的文件名(带扩展名)是否存在,然后重写

RewriteCond %{REQUEST_FILENAME}.ext -f
RewriteRule ^ %{REQUEST_FILENAME}.ext [L]

上述规则是一种通用方法,适用于以.ext结尾的任何文件。

如果您只想重写一个固定文件,可以通过明确命名相关文件来实现,例如

RewriteRule ^search$ /search.php [L]
默认情况下,

mod_rewrite会保留查询字符串,只要您不添加自己的

  

修改查询字符串

     

默认情况下,查询字符串将保持不变。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。要组合新旧查询字符串,请使用[QSA]标志。