【问题标题】:clean URL using .htaccess使用 .htaccess 清理 URL
【发布时间】:2012-10-19 14:25:28
【问题描述】:

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

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

【问题讨论】:

    标签: .htaccess mod-rewrite clean-urls


    【解决方案1】:

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

    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] 之前完美运行!
    【解决方案2】:

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

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

    【讨论】:

    • 这是我尝试做的,是的。但是这段代码(可能是我放错地方了)也不起作用,它不会改变地址栏中的URL...
    • 此代码将不起作用,因为 RewriteRule 无法匹配查询字符串,它仅用于匹配 URI 部分(没有查询字符串)。
    【解决方案3】:

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

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

    【讨论】:

    • 问题依然存在:浏览器地址栏中的URL停留在mydomain.com/index.php?dir=myfolder
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多