我知道这应该很容易,但它打败了我。站点移动后,我希望能够删除文件的路径以及扩展名(如果有)和查询字符串(如果有)和index.php(如果有),只留下文件名。 EG:
http://www.example.com/folder1/folder2/helloworld.html
301 to >> http://www.example.com/helloworld
http://example.com/anotherpath/apage.html
301 to >> http://www.example.com/apage
http://example.com/index.php/blurb/noextension
301 to >> http://www.example.com/noextension
http://www.example.com/longpath/withsome/morefolders/more.html?dkdhghjghjk
301 to >> http://www.example.com/more
原始网站中有许多不同的路径(有和没有www),但 如果 文件以.html结尾(可能有查询我也想把它重定向到域名/文件名
但是......为了使问题更复杂,他们无法重定向
http://www.example.com/category/something
这是因为该类别是新系统的一部分(它的wordpress)。
感谢您对此提供任何帮助!
============
更新 - 有一些问题,但几乎在那里!我调整了你建议的正则表达式,现在也删除.html和查询字符串(如果存在)我有这个。
RewriteRule ^.*/([^/]+)(.*)?\.h.*$ /$1? [L,NC,R=301]
但是,它会将主页重定向到
http://www.example.com
http://www.example.com/_index
令我困惑的是。我的正则表达式中有什么东西吗?
答案 0 :(得分:1)
RewriteEngine On
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/category/
RewriteRule ^.*/([^/]+)\.html$ /$1? [L,NC,R]
RewriteCond %{REQUEST_URI} !^/category/
RewriteRule ^.*/([^/]+)$ /$1? [L,NC,R]
有两条规则,因为我不能单独写。 文件(.html)的第一个规则和目录的第二个规则(没有.html)。 标志 ? $ 1后删除查询
答案 1 :(得分:1)
写入.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]