使用mod_rewrite从URL中删除子目录

时间:2016-01-31 20:09:15

标签: .htaccess mod-rewrite

我正试图摆脱我网站上的一些子目录。

我尝试了这个链接Remove two subdirectories from url with mod_rewrite,但它不符合我的情况。

实际上我有这个结构:www.mywebsite.com/fr/news/index.html我希望它看起来像www.mywebsite.com/index.html

在我的根目录中,a有一个htaccess文件,其中包含以下内容:

Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.html [L]

RewriteCond %{REQUEST_URI} !^/(en|es|pt)/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+fr/([^\s]+) [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/(en|es|pt)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (?!^fr/)^(.*)/$ /fr/$1 [L,NC]

RewriteCond %{REQUEST_URI} !^/(en|es|pt)/
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.]+\.html(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.html$ http://%{HTTP_HOST}/fr/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !^/(en|es|pt)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ http://%{HTTP_HOST}/fr/$1/ [R=301,L]

要使其发挥作用会有什么改变?

提前感谢您的回答

1 个答案:

答案 0 :(得分:1)

  

我有这个结构:

www.mywebsite.com/fr/news/index.html
     

我希望它看起来像

www.mywebsite.com/index.html

我不知道更多,我建议将其放在根文件夹中:

RewriteEngine on

RewriteRule ^[^\/]+\/[^\/]+\/(.*) http://www.mywebsite.com/$1

正则表达式读作:

  • 从一开始,找到一个或多个不是正斜杠的字符
  • 然后是正斜杠
  • 然后是一个或多个不是正斜杠的字符
  • 然后是正斜杠
  • 然后捕获所有剩余的字符