.htaccess始终隐藏URL中的某个子目录

时间:2017-02-09 18:13:25

标签: regex apache .htaccess redirect mod-rewrite

我尝试使用 .htaccess 隐藏网址中的子目录。我有一个PHP脚本,每次客户端进入网站时都会执行该脚本。它是根Apache目录中的index.php。此脚本确定要在网站中使用的语言并重定向到目标目录。英语是我的默认语言,所以我需要将" en" 目录隐藏在URL中,同时将所有URL请求从根目录重定向到&# 34; en" 文件夹,这样他们就不会产生404 HTTP错误。我通过以下几行部分实现了这一目标:

#Remove en/ directory from URL
RewriteRule ^$ en/

#Forward all the requests to en/ directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ en/$1

当请求转发到" en" 目录时,会再次在URL中显示。这将是流程:

如何在列表中的最后一个操作之后删除" en" 目录,留下网址http://domain.com/panel?有没有更好的方法来管理这种行为?

现行规则:

Options -Indexes +FollowSymlinks -MultiViews

ErrorDocument 404 /404.php

RewriteEngine On

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

#Prevent direct access to PHP Scripts
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule \.php$ - [R=404,L]

#Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

1 个答案:

答案 0 :(得分:1)

这样做:

Options -Indexes +FollowSymlinks -MultiViews
ErrorDocument 404 /404.php

RewriteEngine On

#Remove WWW
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L,NE]

# add a trailing slash if public/$1 is a directory
RewriteCond %{DOCUMENT_ROOT}/en/$1 -d
RewriteRule ^(.*?[^/])$ %{REQUEST_URI}/ [L]

#Prevent direct access to PHP Scripts
RewriteCond %{THE_REQUEST} \.php[?/\s] [NC]
RewriteRule ^ - [R=404,L]

RewriteRule ^/?$ en/ [L]

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

清除浏览器缓存并测试您的流量。