我需要一个htaccess来创建以下网址:
domain.com/index.php?page=contact
将链接更改为:
domain.com/contact
所以如果我在做:
<a href="/contact">Contact</a>
该链接将带我到
domain.com/index.php?page=contact
但浏览器链接区域中显示的链接为:
domain.com/contact
有人可以帮帮我吗?
答案 0 :(得分:2)
这应该适合您,它应该放在您的index.php
文件所在的根文件夹中,该文件位于名为.htaccess
的文件中:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?page=$1 [L]
首先我们检查文件是否不存在:
RewriteCond %{REQUEST_FILENAME} !-f
然后我们检查文件夹是否不存在:
RewriteCond %{REQUEST_FILENAME} !-d
然后我们检查网址是我们要查找的内容,在我们使用的domain.com/anything
中:
^([^/]+)$
上述内容将收集/
之后的第一个domain.com
之后的所有内容,例如:
domain.com/contact
domain.com/about-us
domain.com/home
在方括号之前,我们规则中最右边的部分告诉我们要重定向的内容以及在哪里:
index.php?page=$1
这意味着我们希望将我们从之前规则中收集的内容重定向,上面用$1
表示为index.php?page=$1
,使用我们之前的示例意味着:
domain.com/index.php?page=contact
domain.com/index.php?page=about-us
domain.com/index.php?page=home
[L]
告诉我们要停止,L
是一个标志,表示LAST
,没有任何重定向标记,并且URL不是外部的或完整的域名,意味着我们想要在内部重定向。
RewriteBase /
表示我们位于您域名的根文件夹中。
RewriteEngine On
表示我们要激活负责重写重定向的mod_rewrite
。
-MultiViews
是唯一相关的Options
所以我只会解释一下,当文件夹不存在时,它不会寻找替代品在它的位置服务。