我一直在想,如何删除扩展但保留网址的参数?例如: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]
提前谢谢!
答案 0 :(得分:0)
要删除扩展名,通常会检查所请求的文件名(带扩展名)是否存在,然后重写
RewriteCond %{REQUEST_FILENAME}.ext -f
RewriteRule ^ %{REQUEST_FILENAME}.ext [L]
上述规则是一种通用方法,适用于以.ext
结尾的任何文件。
如果您只想重写一个固定文件,可以通过明确命名相关文件来实现,例如
RewriteRule ^search$ /search.php [L]
默认情况下,mod_rewrite会保留查询字符串,只要您不添加自己的
修改查询字符串
默认情况下,查询字符串将保持不变。但是,您可以在包含查询字符串部分的替换字符串中创建URL。只需在替换字符串中使用问号,即表示应将以下文本重新注入查询字符串。如果要删除现有查询字符串,请仅使用问号结束替换字符串。要组合新旧查询字符串,请使用[QSA]标志。