.htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 .htaccess 文件,可以帮我们实现:网页 301重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
在下面的示例中要更改什么?
下面的示例可以输入到您的应用程序中,.htaccess 文件完全如图所示。只需确保调整文件的实际路径,就可以让 .htaccess 文件知道它的位置。另外,如果您看到 example.com,将其更改为您自己的网站域名。
重定向所有网址
下面的命令行将重定向所有网址到新的站点。
Redirect 301 / https://example.com/
重定向到一个单独网址
在应用程序中使用重定向 .htaccess 文件允许您将用户从旧页面重定向到新页面,而无需保留旧页面。例如,如果使用 index.html 作为索引文件,然后稍后重命名 index.html 到 home.html,您可以设置重定向 index.html 到 home.html。例如:
重定向到一个本地网站文件
Redirect /path/to/old/file/old.html /path/to/new/file/new.html
重定向到一个外部网站文件
Redirect /path/to/old/file/old.html https://www.example.com/new/file/new.html
第一路径
旧文件的第一个路径必须是本地UNIX路径,而不是完整路径。所以,如果是。htaccess文件位于目录/example.com,则不包括/home/username/example.com在本地UNIX路径中。第一个/表示example.com目录。如果旧文件位于该目录中,则应在/后面加上旧文件名。
第二路径
新文件的第二个路径可以是本地UNIX路径,也可以是链接到不同服务器或同一服务器上的页面的完整URL。
重定向示例
重定向一个目录到一个 HTML 文件
RedirectMatch 301 ^/blog/about /blog/about.html
重定向一个 index.html 文件到一个不同的目录
Redirect /index.html /new/
重定向 index.html 到 default.html
Redirect /index.html /default.html
重定向一个本地/隐私目录到另一个网站的隐私目录
Redirect /private/ https://www.example.com/private/
从一个不同的站点载入一个 .gif 文件
确保另一个网站是你自己的。你不应该从其他网站热链接文件。
Redirect /img/logo.gif https://www.example.com/images/logo.gif
使用正则表达式
如果要使用正则表达式重定向内容,请使用 RedirectMatch 指令:
RedirectMatch "^/oldfile\.html/?$" "https://example.com/newfile.php"
重定向到一个错误信息
您还可以重定向404错误。它不会抛出404页面,而是重定向到网站的主页。
ErrorDocument 404 https://example.com/
重定向一个旧目录到新目录
这会将旧目录(/blog/archives)中的文件重定向到新目录(/archives)。文件必须存在于新目录中才能正常工作。
RewriteRule ^blog/archives/(.*)$ /newarchives/$1 [R=301,NC,L]
重定向非存在页面页面到 index.php
如果访问者试图访问一个不存在的页面,就会出现404错误。相反,您可以将任何请求重定向到索引中的不存在页面 .php文件(或任何索引文件)中添加以下代码 .htaccess:
Options +SymLinksIfOwnerMatch RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
If your index page isn’t 如果你的首页不是 index.php,将最后一行更改为实际的首页文件,然后访问者将会被重定向到你的首页 。
自动载入一个子目录
此示例将根域的URL重定向到任何子目录。在本例中,它会自动加载example.com/subdir1:
RewriteEngine on RewriteRule ^$ /subdir1/ [L]
强制在网址中使用 www
RewriteEngine On RewriteCond %{HTTP_HOST} ^example.com RewriteRule (.*) https://www.example.com/$1 [R=301,L]
在网址中移除 www
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.example.com RewriteRule (.*) https://example.com/$1 [R=301,L]
重写一个网址
本例将一个URL重写为另一个URL。将重写 example.com/1.html 到 example.com/abc.php?id=1。
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([0-9]+).html /abc.php?id=$1 [QSA,L]
下面解释上述规则:
- ([0-9]+)
- 允许任何数字,且仅允许任何数字,1次或多次。
- ([a-z-]*)
- 允许任何小写字母加“-”分隔0次或更多次。如果您希望它也支持大写,请使用“([a-zA-Z-]*)。
- 例如:
- RewriteRule ^place/([a-zA-Z-]*).html /place/abc.php?id=$1 [QSA,L]
- [QSA,L]
- 将其附加到内部脚本查询字符串,并使其成为最后执行的重写规则。
使用此方法后,您可以检索任意地址类型的网页。这是方便的复古装修一个网站,而不是设计与mod_重写铭记。这很好,因为它不会破坏用户计算机上保存的任何书签。
将不存在的链接重写到 index.php
以下内容将指向不存在的文件或文件夹的所有链接重定向到index.php。但是,如果文件或目录确实存在,它将正常加载:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Hits: 16