使用 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 并删除查询名称 [关闭]