首页 文章

.htaccess使用查询字符串重写URL

提问于
浏览
2

我已尝试在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放错了地方?

这是完整的.htaccess文件,没有添加新的RewriteRule

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]

任何帮助将非常感激 . :-)

1 回答

  • 4

    UPDATED

    现在接受测试了 . 试试这个:

    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

    "; }else { echo "This is INDEX

    "; } ?>

    至于将重写规则放在.htaccess中的位置,我无法知道 . 我想你必须在实际规则之前和之后尝试它 .

相关问题