2017-02-08 70 views
0

我想知道如何設置一個RegEx來重寫一個特定的URL,因此它看起來像所請求的網站是在一個特定的文件夾。我用手動RewriteRules嘗試過,但在重寫名稱中使用「/」時出現問題... (這是問題#2:爲什麼我不能在重寫的名稱中使用「/」?)在.htaccess中的URL重寫正則表達式

I有一個名爲像文件:

ga_filename.php 或 gt_filename.php

這些文件是物理上都在同一個目錄中。

當前的URL是一樣的東西

www.whatever.de/index.php?content=ga_filename.php

所以相當於我的檔案2個開始字母(GA或GT)我想網址看起來像

www.whatever.de/ga/filename 或 www.whatever.de/gt/filename

我需要的是,「=後讀取前兩個字母正則表達式「(來自?content =),cre ates相應的文件夾,並將「_」(來自ga_filename.php)後的文件名的其餘部分與.php一起作爲url中顯示的文件名移除。

我希望我已經解釋這可以理解.. 任何幫助,非常感謝。

回答

0

嘗試下面的規則,

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/([\w-]+)$ index.php?content=$1_$2.php [L] 
+0

這似乎並沒有工作。我忘了提及,這些文件包含在index.php 所以實際的網址就像 www.whatever.de/index.php?content=ga_filename.php 我編輯了我的問題。 –

+0

請嘗試編輯! –

0

您可以在網站根目錄的.htaccess使用這2個規則:

RewriteEngine On 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/(?:index\.php)?\?content=(\w{2})_([^\s&.]+)\.php [NC] 
RewriteRule^/%1/%2? [R=301,L,NE] 

# internal forward from pretty URL to actual one 
RewriteRule ^(\w{2})/([^/.]+)/?$ index.php?content=$1_$2.php [L,QSA] 
+0

這似乎並不奏效。我忘了提及,這些文件包含在index.php 所以實際的網址就像 www.whatever.de/index.php?content=ga_filename.php 我編輯了我的問題。 –

+0

這實際上只顯示我的index.php,但沒有任何包含和所有格式的css和圖像丟失 –

+0

image/css/js問題是由於您使用相對路徑。你可以在頁面的HTML的''部分下面添加這個:'來解決。 – anubhava