关于 .htaccess:htaccess RewriteCond 和 RewriteRule

 2022-02-12 

htaccess RewriteCond and RewriteRule

我实际上正在开发一个小的 php webiste,我决定尝试使用 htaccess 文件给它一些漂亮的和清理 url。我已经阅读了一些关于它的文档并创建了一个带有一些规则的简单文件,事情是它在工作但部分工作。

这就是我所做的:
我添加了一个 RewriteRule 以将 "www.mysite.com/hello" 重定向到 "www.mysite.com/index.php?action=hello"。

这工作正常,问题是我想隐藏 "index.php?action=" 部分,如果它出现的话。因此,如果 somoene 输入类似 "www.mysite.com/index.php?action=hello" 的内容,它将在 url 字段中转换为 www.mysite.com/hello"。

为此,我写了以下内容:

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

遗憾的是它只隐藏了 url 的 index.php 部分,"?action=" 部分仍然存在。

我做错了什么?

问候。

编辑:我正在 wamp 本地测试这个


你已经很接近了。规则中的正则表达式试图匹配 article.php,但条件表明请求必须针对 index.php,因此该规则不太可能运行。试试:

1
2
3
4
5
6
7
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\\ /index\\.php\\?action=([^&\\ ]+)
RewriteRule ^index\\.php$ /%1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?action=$1 [QSA,L]

并确保该规则在内部重写为 index.php.

的规则之前