我尝试使用 .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]
答案 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]
清除浏览器缓存并测试您的流量。