2017-08-16 125 views
4

我試圖從URL中刪除.php文件擴展名和文件夾& &子文件夾(如果存在)。重寫URL:從URL中刪除子文件夾和文件擴展名

案例1

輸入:

127.0.0.1/project/folder/alfa.php 

輸出:

127.0.0.1/project/alfa 

案例2

輸入:

127.0.0.1/project/folder/subfolder/beta.php 

輸出:

127.0.0.1/project/beta 

這是我到目前爲止有:

刪除只是延長工作正常,具有去除問題文件夾

# Turn mod_rewrite on 
RewriteEngine On 

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


RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L] 

請指教 謝謝。

+0

我認爲你需要硬編碼的項目目錄。 – Thamaraiselvam

+1

你的意思是掩蓋或重定向?也就是說,我訪問'127.0.0.1/project/folder/subfolder/beta.php'並重定向到'127.0.0.1/project/beta',或者你想讓用戶訪問'127.0.0.1/ project/beta'作爲「127.0.0.1/project/folder/subfolder/beta.php」的掩碼? – Bananaapple

+0

@Bananaapple 試圖讓用戶訪問127.0.0.1/project/beta作爲127.0.0.1/project/folder/subfolder/beta.php的屏蔽 – codepixlabs

回答

3

你可以擁有這裏面的.htaccess目錄/project/

RewriteEngine On 
RewriteBase /project/ 

# rewrite to folder/subfolder/ 
RewriteCond %{DOCUMENT_ROOT}/project/folder/subfolder/$1.php -f 
RewriteRule ^(.+?)/?$ folder/subfolder/$1.php [L] 

# rewrite to folder/ 
RewriteCond %{DOCUMENT_ROOT}/project/folder/$1.php -f 
RewriteRule ^(.+?)/?$ folder/$1.php [L] 
+1

絕對完美:) – codepixlabs

0

根據你對你的問題的評論的澄清 - 這將很難通過RewriteRule單獨動態處理。

考慮一下:

如何阿帕奇知道/project/beta映射到/project/folder/subfolder/beta.php/project/alfa映射到/project/folder/alfa.php?如果這是不可行的

RewriteRule ^project/beta/? /project/folder/subfolder/beta.php [QSA,L]

RewriteRule ^/project/alfa/? /project/folder/alfa.php [QSA,L]

由於大量的,將在這裏所需的規則我會嘗試解決這個通過:

你可以硬編碼這些像這樣一個腳本。類似這樣的:

如果請求的資源不是文件或目錄,則將其發送到腳本。然後讓該腳本搜索目標目錄結構,例如/project,以獲取與您的掩碼URL的第二部分(alfa/beta部分)匹配的所有php文件。如果只找到一個文件需要它來運行它。

+0

文件夾深度僅爲2即文件夾和子文件夾,每個文件夾中的所有文件都是唯一的。如果這樣更容易 – codepixlabs

1

您可以使用以下正則表達式來捕獲URL必填字段。然後使用捕獲的值1,2來生成輸出。

([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\/[A-Za-z0-9]*).*(\/.*)\.php 

您可以在這裏看到demo。它捕獲在1地址和父文件夾和文件名在2

注:我已經考慮了地址是IPv4

+0

謝謝!我會看看 – codepixlabs