2014-08-29 41 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

相關問題