mod_rewrite - 如何在不更改html链接的情况下保留重写的地址

时间:2014-07-21 18:06:39

标签: regex apache .htaccess mod-rewrite

假设我有一个包含指定网站的网站: 的index.php info.php的

为了隐藏URL的“index.php”部分并将“info.php”更改为“info”,我创建了以下.htaccess:

RewriteEngine On
RewriteRule ^info$ info.php
RewriteRule ^.$ index.php

当我直接在地址栏中输入新的URL时它工作得很好,但在index.php里面我有:

<a href="info.php">

所以当我点击链接时,它会将我引导到信息页面并在URL中显示“info.php”。如果我想在点击链接后在URL中看到“info”,我是否必须更改HTML代码中的链接?或者有没有办法让.htaccess文件自动执行?

1 个答案:

答案 0 :(得分:0)

您可以将此代码放在DOCUMENT_ROOT/.htaccess文件中,以便自动更改这些链接:

RewriteEngine On
RewriteBase /

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(?:index)?(.*?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,L,NE]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]

但强烈建议您更改HTML页面中的这些链接,以避免一次外部重定向。