2012-12-02 42 views
1

我有一個目錄結構如下:國防部只有當改寫目錄中存在

/gallery 
----index.php 
----/23XASDTAGH 
----/24XGA43KJA/ 

我想使用國防部重寫改寫,如果存在一個目錄。所以:

www.example.com/gallery/23XASDTAGH/

成爲

www.example.com/gallery/index.php?gallery=23XASDTAGH

,但我想靜靜地做到這一點,所以沒有發生變化的URL。現在我有這樣的:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME}/ -d 
RewriteRule (.*) /gallery/index.php?gallery=$1 [L] 

與工作

www.example.com/gallery/23XASDTAGH/

,但奇怪的是,當我離開了結尾的斜線關閉它改變了網址

www.example.com/gallery/23XASDTAGH/?gallery=23XASDTAGH

結束

我怎樣才能讓它在有或沒有斜線的情況下工作?

回答

-1

終於想通了,我需要一個?/在在重寫規則中我的表達式結尾表示斜線是可選的。爲什麼正則表達式必須如此容易。 8-)

正確表達:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME}  -d 
RewriteRule ^([a-zA-Z0-9_-]+)?/$ /gallery/index.php?gallery=$1 [L] 
+0

這就是我的答案,那麼你發現了什麼?另一方面,你所做的是錯誤的。問號必須在可選字符之後,而不是之前。您正在使正則表達式組可選,而不是斜槓。 –

1

我認爲下面會做的伎倆

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.*) /gallery/index.php?gallery=$1 [L] 

二線檢查所請求的文件名是一個目錄,如果是,則第三行執行實際的重寫

要嘗試和處理尾隨斜線問題,也許這一點,或者像這樣將工作

RewriteCond %{REQUEST_FILENAME} (.*)/?$ 
RewriteCond %1 -d 
RewriteRule (.*)/$ /gallery/index.php?gallery=$1 [R=301] 
+0

是大教堂,這基本上它。除了我添加一個尾部的斜槓到該網址,它不能正常工作。 – user1869566

0

你可以試試這個:

RewriteEngine on 
RewriteRule ^(gallery)/([a-zA-Z0-9-_=]+)/?$ http://www.example.com/$1/index.php?$1=$2 [R=301,L] 

永久重定向輸入URL(在一個在瀏覽器地址欄):

www.example.com/gallery/23XASDTAGHwww.example.com/gallery/23XASDTAGH/到:

www.example.com/gallery/index.php?gallery=23XASDTAGH