我刚从头开始重新开发现有网站。旧网站使用纯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多页。
答案 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 而不是文件系统上的完整路径。