htaccess将子文件夹(第二级)中的文件重写到文件夹(第一级)

时间:2014-08-29 07:07:43

标签: apache .htaccess mod-rewrite redirect url-rewriting

目前,我正在使用以下htaccess代码从http://www.domain.com/folder/file.php加载http://www.domain.com/file,从网址中删除文件夹名称“/ folder /”和文件扩展名“.php”。

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/$1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

现在,我尝试做的几乎相同,但是使用存储在子文件夹中的文件。

因此,换句话说,我想从http://www.domain.com/folder/subfolder/file.php

致电http://www.domain.com/subfolder/file

在这种情况下,隐藏扩展文件不是问题,因为上面代码中的最后两行是全局工作的,问题在于重写只是通过添加“子文件夹”名称才起作用。我认为这会起作用,但事实并非如此:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI}\.php -f [OR]
RewriteCond %{DOCUMENT_ROOT}/folder/subfolder%{REQUEST_URI} -d
RewriteRule ^(.*)$ /folder/subfolder/$1.php [L]

我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

用这个替换你的两个规则:

Options +FollowSymLinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/folder/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /folder/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]