我调用?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
'