我实际上正在研究一个小的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的本地测试
答案 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
的规则。