使用.htaccess清理URL

使用.htaccess清理URL,.htaccess,mod-rewrite,clean-urls,.htaccess,Mod Rewrite,Clean Urls,我正在尝试重定向我的域上的链接。 我想要实现的是: 当用户单击指向的链接时 mydomain.com/index.php?dir=myfolder 我希望他被重定向到这个URL,但浏览器栏应该显示这个URL: mydomain.com/myfolder 因为我无法访问链接是如何建立的(这是一个php站点),所以我尝试使用.htaccess文件来实现这一点 这就是我所拥有的: RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} subdo

我正在尝试重定向我的域上的链接。 我想要实现的是: 当用户单击指向的链接时

mydomain.com/index.php?dir=myfolder

我希望他被重定向到这个URL,但浏览器栏应该显示这个URL:

mydomain.com/myfolder

因为我无法访问链接是如何建立的(这是一个php站点),所以我尝试使用.htaccess文件来实现这一点

这就是我所拥有的:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} subdomain.mydomain.com
RewriteCond %{REQUEST_URI} (.*)/style.css [OR]
RewriteCond %{REQUEST_URI} (.*)/script.js [OR]
RewriteCond %{REQUEST_URI} (.*)/logo.png
RewriteRule (.*) http://www.subdomain.com%{REQUEST_URI} [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?dir=$1 [L]
因此,当我在浏览器中输入
“mydomain.com/myfolder”
时,它工作正常,地址栏中的URL保持如下。但是当我输入“mydomain.com/index.php?dir=myfolder”时,它也可以工作,但URL也保持不变(这不是我想要的)。 我假设我需要以某种方式使用.htaccess文件更改URL,然后(正如我已经做的那样)将其重写为php方案。 我现在做了几种方法,但我不知道如何做到这一点。 我希望你能理解我的问题,并能帮助我

谢谢大家!

EDIT:
解决方案(感谢@anubhava):


要将格式为
mydomain.com/index.php?dir=myfolder
的URL美化为
mydomain.com/myfolder
,请在
文件中尝试以下重写规则:

RewriteEngine on
RewriteRule ^([^/\.]+)/?$ /index.php?dir=$1 [L]

我想你的问题是让
/index.php?dir=example
重定向到
/example
。以下示例发出永久重定向:

RewriteRule ^index\.php\?dir=?$ /$1 [NC,R=301,L]

只需将此规则附加到现有.htaccess文件的末尾:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=([^\s]+) [NC]
RewriteRule ^ %1? [R=301,L]

问题仍然存在:浏览器地址栏中的URL保持
mydomain.com/index.php?dir=myfolder
这就是我尝试做的,是的。但是这段代码(可能我放错地方了)也不起作用,它不会更改地址栏中的URL…这段代码不会起作用,因为RewriteRule无法匹配查询字符串,它只用于匹配URI部分(没有查询字符串)。非常感谢!我把这段代码放在
RewriteCond%{REQUEST\u FILENAME}之前-f RewriteCond%{REQUEST_FILENAME}-重写规则^(.*)$/index.php?dir=/$1[L]
非常好用!
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?dir=([^\s]+) [NC]
RewriteRule ^ %1? [R=301,L]