2014-08-29 121 views
1

目前,我使用下面的htaccess代码从http://www.domain.com/file加载http://www.domain.com/folder/file.php,删除文件夹名称“/ folder /”,文件扩展名“ .php“,来自URL。htaccess将子文件夹(第二级)中的文件重写为文件夹(第一级)

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/subfolder/file

调用http://www.domain.com/folder/subfolder/file.php在这种情况下,隐藏扩展名的文件是不是一个问题,因为从上面的代码工作全局的最后2行,这个问题是与只需添加“子文件夹”名称就可以重写哪一项不起作用。我认为这是工作,但它不是:

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] 

我感谢任何帮助。

回答

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] 
+0

谢谢anubhava。它不起作用,在这两种情况下,我都使用这段代码得到了404 Not Found Error。 – JohnA10 2014-08-29 18:57:44

+0

您是否.htaccess不在DocumentRoot中?这个.htaccess中有更多的规则吗?是'http:// www.domain.com/file'给404给你吗?发生什么事你使用'http:// www.domain.com/folder/file.php'? – anubhava 2014-08-29 19:01:41

+0

嗨。是的,.htaccess位于根域文件夹中。在这个.htaccess中有更多的规则,但是我在文件的最后使用这个规则来避免冲突。 .htaccess中的其他规则是简单的RewriteRules,用于将URL从domain.com/index.php?query=hello更改为domain.com/hello。 当我使用你给我的代码..并尝试http://www.domain.com/file,我得到了404页面。其他一切正常工作。 – JohnA10 2014-08-29 19:31:34

相关问题