htaccess RewriteCond和RewriteRule

时间:2015-07-10 02:08:24

标签: .htaccess url-rewriting

我实际上正在研究一个小的php网站,我决定尝试使用htaccess文件给它一些不错的网站。我已经阅读了一些关于它的文档,并创建了一个带有一些规则的简单文件,但事情是它有效但部分有效。

这就是我所做的: 我添加了一个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。

为此,我写了以下内容:

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

可悲的是,它只隐藏了url的index.php部分,“?action =”部分仍然存在。

我做错了什么?

问候。

编辑:我正在wamp的本地测试

1 个答案:

答案 0 :(得分:1)

你非常接近。规则中的正则表达式尝试匹配article.php,但条件是请求必须是index.php,因此该规则不太可能运行。尝试:

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的规则。