如何使用.htaccess重写删除目录?

时间:2015-01-17 16:52:18

标签: apache .htaccess mod-rewrite

大家好!

我的网站上有多名员工,他们有各自的项目。我有一个问题,因为网站设置如下:

site.com/myownproject1

site.com/myownproject2

site.com/john/projectbyjohn1

site.com/john/projectbyjohn2

site.com/james/projectbyjames1

site.com/james/projectbyjames2

当有人试图访问没有名称前缀的目录时,我想设置我的.htaccess文件重写到那些文件夹,所以

site.com/john/projectbyjohn2

可以通过

访问
site.com/projectbyjohn2

这就是我的.htaccess currenlty的样子:

DirectoryIndex index.php index.html
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
#Lots of stuff that does not matter

编辑:截至目前的完整.htaccess:

DirectoryIndex index.php index.html
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
Header set Access-Control-Allow-Origin "*"
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [S=2]
RewriteCond %{DOCUMENT_ROOT}/mitch/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/mitch/$1 -f
RewriteRule ^(.*)$ /mitch/$1 [L]
ErrorDocument 400 /ErrorDocument.php?err=400
ErrorDocument 401 /ErrorDocument.php?err=401
ErrorDocument 402 /ErrorDocument.php?err=402
ErrorDocument 403 /ErrorDocument.php?err=403
ErrorDocument 404 /ErrorDocument.php?err=404
ErrorDocument 405 /ErrorDocument.php?err=405
ErrorDocument 406 /ErrorDocument.php?err=406
ErrorDocument 407 /ErrorDocument.php?err=407
ErrorDocument 408 /ErrorDocument.php?err=408
ErrorDocument 409 /ErrorDocument.php?err=409
ErrorDocument 410 /ErrorDocument.php?err=410
ErrorDocument 411 /ErrorDocument.php?err=411
ErrorDocument 412 /ErrorDocument.php?err=412
ErrorDocument 413 /ErrorDocument.php?err=413
ErrorDocument 414 /ErrorDocument.php?err=414
ErrorDocument 415 /ErrorDocument.php?err=415
ErrorDocument 416 /ErrorDocument.php?err=416
ErrorDocument 417 /ErrorDocument.php?err=417
ErrorDocument 500 /ErrorDocument.php?err=500
ErrorDocument 501 /ErrorDocument.php?err=501
ErrorDocument 502 /ErrorDocument.php?err=502
ErrorDocument 503 /ErrorDocument.php?err=503
ErrorDocument 504 /ErrorDocument.php?err=504
ErrorDocument 505 /ErrorDocument.php?err=505

1 个答案:

答案 0 :(得分:0)

试试这个

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [S=2]

RewriteCond %{DOCUMENT_ROOT}/john/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/john/$1 -f
RewriteRule ^(.*)$ /john/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/james/$1 -d [OR]
RewriteCond %{DOCUMENT_ROOT}/james/$1 -f
RewriteRule ^(.*)$ /james/$1 [L]

如果目录/文件已存在于根目录中,则第一个规则会跳过以下两个规则。接下来的两个只根据它在/john/james内找到的位置解析文件/目录。

请注意,如果John和James都决定将文件或子目录命名为相同,那么我们就会陷入困境。在我们的案例/john中,首先定义的规则将在这种情况下取​​代。