【问题标题】:.htaccess Rewrite URL with a query string.htaccess 用查询字符串重写 URL
【发布时间】:2012-11-15 13:32:16
【问题描述】:

我已经尝试了在 stackoverflow 上发布的大量解决方案,但似乎对我没有任何帮助。我想重写我网站上的一些 URL 以使其对搜索引擎友好。

我想要这样的网址:- http://www.mysite.com/index.php?filter=accounts 显示为:- http://www.mysite.com/accounts

网络上的许多帖子都将其作为解决方案:-

RewriteRule ^([^/]+)/?$ index.php?filter=$1 [QSA,L]

但这没有任何作用。

我的站点是一个 Joomla CMS 站点,并且已经在 .htaccess 文件中进行了一些重写。难道是我把我的新 RewriteRule 放错地方了吗?

这是未添加我的新 RewriteRule 的完整 .htaccess 文件

Options +FollowSymLinks
RewriteEngine On

# prevents people from accessing anything with phpMyAdmin
RewriteRule phpMyAdmin - [F]

# force canonical www if request is for non-www or has port number etc
RewriteCond %{HTTP_HOST} !^(www\.mysite\.com)?$
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L]

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
RewriteBase /
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} (/[^.]*|\.(php|html?|feed|pdf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]

任何帮助将不胜感激。 :-)

【问题讨论】:

    标签: .htaccess url mod-rewrite rewrite


    【解决方案1】:

    更新

    现在经过测试。试试这个:

    RewriteEngine On
    RewriteRule ^([a-zA-Z0-9-=_?]+)/?$ index.php?filter=$1 [L] 
    

    .htaccess 进入根目录。

    请求的 URL 是 http://www.mysite.com/accounts/,但可以是任何东西:http://www.mysite.com/apples/ .

    注意:地址栏中显示的 URL 是在该地址栏中输入的 URL。我认为不是 http://www.mysite.com/index.php?filter=accounts 因为我猜重定向的目的是用更友好的方式替换它(http ://www.mysite.com/accounts),这是必须在地址栏中输入的,而不是相反。有点令人困惑,但我希望它有意义。

    要对其进行测试,请在根目录的 index.php 中仅包含以下代码。

    <?php 
    
    if ($_GET['filter'] == 'accounts') {
    echo "This is Accounts<br /><br />";    
    }else {
    echo "This is INDEX<br /><br />";       
    }
    
    ?>
    

    至于将重写规则放置在 .htaccess 中的什么位置,我不知道。我想你必须在实际规则之前和之后尝试一下。

    【讨论】:

    • 您好,感谢您的回复。不幸的是,它什么也没做。查询字符串可以是几个选项之一,并且不会总是“帐户”,尽管如果我得到一个针对单个查询的解决方案,那么我无法为每个查询添加一行的数量不多。跨度>
    • 好吧,我会尝试并测试一个类似的解决方案。有一个,我敢肯定。重要的是 .htaccess 文件位于根目录中:在这种情况下为 public_html。
    • 嗨。 .htaccess 在 public_html 中,我刚刚清除了缓存,以确保没有缓存问题阻止它工作。
    • 嗨,费利佩。我真的很感谢你试图帮助我的努力,但我仍然无法让它发挥作用。我想知道你的建议是否与需要发生的相反。我需要请求的 URL 为 mysite.com/index.php?filter=accounts 以便我可以在 PHP 中使用查询字符串,但我希望浏览器地址栏中显示的 URL 读取 mysite.com/accounts 或者如果这不可能,它可能是mysite.com/services/accountsmysite.com/services/applies 等。再次感谢。
    • 谢谢费利佩。最后到了那里。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-06-16
    • 2012-09-19
    • 1970-01-01
    • 2016-02-13
    • 2020-06-04
    • 2015-12-26
    相关资源
    最近更新 更多