htaccess从页面ID到名称重写不工作


htaccess rewrite from page ID to name not working

我调用?page=about使用GET方法在index.php的形式(即。'about'是一个选择选项)。一旦我点击提交,URL看起来像这样:

http://example.com/?page=about

但是我希望它看起来像这样:

http://example.com/about

,但保持脚本(PHP)在index.php上工作(不要也不想有一个'about'文件),即。一旦发送表单,我想在同一页面上使用GET值。我可以使php脚本工作,它反应良好,但URL重写根本不起作用。

我已经尝试了下面的htaccess重写,但它没有做任何事情,URL仍然如上所述。

我htaccess

:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?page=$1 [L,QSA]
我将非常感谢你的帮助,因为我不知道为什么这不起作用。我已经在网上搜索过了,每个人都指向这个规则,但它对我一点用都没有。

提前感谢!

编辑:

让我张贴我使用的php代码,对不起,我错过了。我现在已经删除了action属性,因为我在浏览器中使用它,我知道在提交表单时向我发送相同的内容:

<?php
$page = $_GET['page'];
switch($page){
 case 'about': echo 'I am me'; break;
 case 'galery': echo 'Nice pictures here'; break;
}
?>
<body>
<form action="/" method="get">
<select name="page">
    <option value="about">about</option>
    <option value="galery">galery</option>
</select>
<input type="submit" value="Submit" />
</form>
</body>

编辑# 2:

我必须将action="/"添加到表单标签中,以便anubhava的解决方案工作

这应该是你完整的。htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
#external redirect from /?page=about OR /index.php?page=about to /about
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}'s/+(?:index'.php|)'?page=([^'s]+) [NC]
RewriteRule ^ /%1? [R=301,L]
#internal forward from /about to /?page=about
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+?)/?$ /?page=$1 [L,QSA]

Try

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

我正在调用?page=关于在index.php上使用GET方法

试着呼叫正确的链接?/about '代替' ?page=about '