使用 htaccess 删除 get 变量和 .php

Posted

技术标签:

【中文标题】使用 htaccess 删除 get 变量和 .php【英文标题】:Delete get variables and .php using htaccess 【发布时间】:2014-12-05 12:32:45 【问题描述】:

我正在尝试解决一些 htaccess 问题,但无法找到解决方案。 我有以下html

<a href="www.site.com/home.php?Idi="English">English</a> <a href="www.site.com/home.php?Idi="Française">Française</a>

目标是用户直接进入地址栏:

www.site.com/home/English

www.site.com/home/Française

显然,get 变量应该到达 home.php 进行处理。

此外,该网站还有其他扩展名为 .php 的页面,我删除了每个扩展名:

Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteCond %REQUEST_FILENAME.php -f RewriteRule ^ %REQUEST_URI.php [L]

另外,我想要起始页:

www.site.com/home.php

将显示为:

www.site.com/home/English

我看过很多关于它的教程和帖子,但我无法解决它。

任何帮助将不胜感激,谢谢

已编辑

最后,按照 UnskilledFreak 的建议,我将原始链接更改为:

<a href="www.site.com/home/English">English</a>
<a href="www.site.com/home/Française">Française</a>

htaccess 如下:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
#Receive site.com/home/Language and internally processes site.com/home.php?Idi=Language
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^home/(English)/?$ home.php?Idi=English [QSA,NC,L]
RewriteRule ^home/(Française)/?$ home.php?Idi=Française [QSA,NC,L]
#Receive site.com/something and internally goes to site.com/something.php
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^ %REQUEST_URI.php [L]

为了避免新页面加载css、js等链接崩溃,我在html的每条路径前都加了/

htaccess 被放置在根目录中。 服务器中不存在“home”文件夹。

【问题讨论】:

在你的href中输入你希望用户显示的url,你的.htaccess必须将(.*).php(.*)重写为$1.php?get=$2,然后分解斜线$_GET[“获取”]。现在你将拥有一个包含所有参数的数组 也许我应该重新问这个问题,因为有更多的链接指向同一个 .php:法语 好吧,如果我没记错的话,我的帖子会这样做,在偏移量 1 的爆炸数组中,你会找到你想要的,偏移量 0 应该是“家”和 1“英语”或“法语” " 或输入的任何内容 我知道我应该将链接更改为 English 。但是如果链接不包含变量,如何用户的选项可以到达服务器吗? 好吧,如果链接是 www.site.com/home/english,并且您想使用我的解决方案,那么数组在偏移量 0“home”和 1“english”处保持 - 如果链接是 www.site.com/home/francaies 然后 1 是“francaise” - 但是如果 www.site.com/home 则未设置偏移量 1,因此请检查是否已设置,如果未设置偏移量 1 为例如英语默认情况下 【参考方案1】:

就像 cmets 解释和上面编辑过的帖子一样,它会起作用 ;)

但这是我得到的另一种解决方案,也可以使用:

在我的 document_root 中,我添加了一个名为 test 的文件夹,其中有 4 个文件,内容如下:

.htaccess

Options +FollowSymlinks
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule . /test/index.php [L]

index.php - 用于重写和测试链接的包装器

echo'
<!DOCTYPE html>
    <head>
        <title>Rewrite Test</title>
        <link rel="stylesheet" type="text/css" href="/test/style.css">
    </head>
    <body>
        <a href="/test/home/english">English</a><br>
        <a href="/test/home/francaise">Francaise</a><br>
';
$get = explode("/",$_SERVER["REQUEST_URI"]);
$get = array_slice($get,2); // ignoring first empty key and folder 'test'

#echo "<pre>".print_r($get,true)."</pre>";

if(file_exists($get[0].".php"))
    require($get[0].".php");
else
    echo 'file '.$get[0].'not found';    

echo'
    </body>
</html>';

home.php - 根据要求

<?php
echo 'in home.php, you have choosen:'.$get[1];
?>

style.css - 仅用于测试文件访问是否有效

body 
    color:#ff8800;
    font-weight:bold:

经过测试并按预期工作:)

【讨论】:

1up 对于解决问题的帮助和指导以及解释(我仍然无法获得答案,我还没有足够的声誉,哈哈) 没问题,主要的是:你的问题已经解决了,欢迎你 ;)

以上是关于使用 htaccess 删除 get 变量和 .php的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 编辑 url 并删除查询名称 [关闭]

htaccess mod 用斜杠将 $_GET 重写为变量

使用 PHP + .htaccess 访问 GET 变量

.htaccess 重写仍然可以使用 get 变量的漂亮 url

.htaccess 获取整个查询字符串到一个变量

如何在php中重写Get变量的url [重复]