什么是.htaccess 301重定向相对于路径?

时间:2012-02-03 07:28:19

标签: php .htaccess redirect url-rewriting http-status-code-301

我刚从头开始重新开发现有网站。旧网站使用纯HTML,而新网站将从数据库中提取内容。现在我需要将旧页面重定向到新的URL结构,但是我对如何为文件到文件重定向编写.htaccess规则感到困惑。

在我发现的所有示例中,规则的第一部分看起来像是来自根的绝对目录路径,但它们只包含紧跟在域名后面的URL部分

例如,我想重定向

https://garrettcounty.us/archives/12262011news.html

https://garrettcounty.us/news/20111226/house-fire-on-christmas-day

从我见过的例子(StackOverflow和国外),我猜规则是

redirect 301 /archives/12262011news.html https://garrettcounty.us/news/20111226/house-fire-on-christmas-day

但是服务器上原始文件的实际路径是

  

/家庭/ 用户名 /public_html/archives/12262011news.html

我应该使用目录路径还是来自域的路径?

我希望能够使用重写规则。不幸的是,原始开发人员没有使用一致的文件命名方案,因此我遇到了像

这样的问题
12262011news.html
Jan-19-2012-Headlines.html
State-Of-The-Union-25jan2012.html

在新模型中,我通过index.php与

指导一切
<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

所以如果有人知道将所有旧网页映射到新网址的简单方法,我很乐意听到。就目前而言,看起来我必须逐个重定向70多页。

1 个答案:

答案 0 :(得分:2)

那么你的旧网址没有新闻标题,所以显然mod_rewrite无法创建它。但是要重定向

https://garrettcounty.us/archives/12262011news.html

https://garrettcounty.us/news/20111226/

您可以在.htaccess中使用这样的代码:

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{HTTPS} =on
RewriteRule ^archives/(\d+)([^.]*)\.html$ https://garrettcounty.us/$2/$1/ [R=301,L,NC]

Redirect指令中使用的路径:对于mod_alias或mod_rewrite,您必须使用路径相对于DOCUMENT_ROOT 而不是文件系统上的完整路径。