首页 文章

.htaccess问题 - URL重写

提问于
浏览
0

我在.htaccess中遇到了网址重写问题 . 这是.htaccess文件:

RewriteEngine On
RewriteBase /community/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^view-all-results$ forums/index.php?view=view-all-results [R=302]
RewriteRule ^view-all-results/$ forums/index.php?view=view-all-results [R=302]

我需要重写网址,如“ /community/view-all-results?u=2 " to " community/forums/index.php?view=view-all-results&u=2 ". But according to the above rule I'll get " community/forums/index.php?view=view-all-results ” .

我试图将RewriteRule改为

RewriteRule ^view-all-results?(.*)$ forums/index.php?view=view-all-results&$1 [R=302]

但它不能正常工作 . 它仍然将URL重写为“ community/forums/index.php?view=view-all-results ” .

当我改变规则(代替*)时:

RewriteRule ^view-all-results?(.+)$ forums/index.php?view=view-all-results&$1 [R=302]

我有像“ community/forums/index.php?view=view-all-results&s ”这样的网址 . 所以我不明白这种行为 . ((

任何建议我都将非常感激 .

2 回答

  • 2

    魔术标志是in the docs: [QSA],它会将原始查询字符串添加到您的网址 .

    正常匹配仅针对路径进行,而不是再次进行查询,您可以在魔术变量 %{QUERY_STRING} 中找到 . 匹配此变量可以在 RewriteCond 条件下完成 . 您也可以将此变量附加到生成的URL,但 QSA 在这里是无限的用户 .

  • 2

    尝试一下......

    RewriteEngine On
    RewriteBase /community/
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^view-all-results/?$ forums/index.php?view=view-all-results [QSA]
    

    基本上,RewriteRule的前半部分与QUERY_STRING不匹配,因此您的第二个示例将永远不会与它匹配 . 你的第一个代码缺少的主要是QSA标志,它告诉它传递它接收的QUERY_STRING以及新创建的QUERY_STRING . 我还删除了R = 302,因为我假设您不希望更改URL .

    编辑:哦,我还通过使尾随斜杠可选来组合规则 .

相关问题