使用.htaccess清理URL

时间:2012-10-19 14:25:29

标签: .htaccess mod-rewrite clean-urls

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

的链接时

mydomain.com/index.php?dir=myfolder

我希望将他重定向到此网址,但浏览器栏应显示此网址:

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-scheme。 我现在做了几种方法,但我不知道该怎么做。 我希望你理解我的问题并且可以帮助我!

谢谢!

EDIT:

解决方案(感谢@anubhava):

RewriteEngine on
RewriteBase /

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?dir=/$1 [L]

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我认为您的问题是将/index.php?dir=example重定向到/example。以下示例发出永久重定向:

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

答案 2 :(得分:0)

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

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