2011-03-12 102 views
0

我的.htaccess文件目前看起來是這樣的:使用mod_rewrite模擬多個子目錄

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L] 

它工作正常的像http://site.com/aaaaa網址,但對於像http://site.com/aaaa/bbb網址$ _GET [「頁」]變量將只包含bbb而不是aaaaa/bbb。

有沒有辦法讓頁面變量中的所有子目錄?

+0

嘗試刪除結尾/?在RewriteRule – yoavmatchulsky 2011-03-12 12:50:28

+0

多個問題中,搜索 – Efazati 2011-03-12 12:55:35

回答

1

我建議將/添加到最後一行中接受字符的列表中:/?([A-Za-z0-9/-]+)/?$

1

在此行中:

RewriteRule /?([A-Za-z0-9-]+)/?$ index.php?page=$1 [QSA,L] 

你錯過了^整個字符串相匹配。另外,在您的字符串中,您希望在網址中匹配/。所以它應該是:

RewriteRule ^/?([A-Za-z0-9-/]+)/?$ index.php?page=$1 [QSA,L] 

錯過了^將讓你最後ungreedy比賽。

+0

無需轉義'/'。 – Gumbo 2011-03-12 13:37:11

1

爲什麼不只是拍攝的一切

這個樣子,我想:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) temp.php?page=$1 [QSA,L] 


有了這個(考慮到我的腳本是在temp文件夾),既http://tests/temp/blahhttp://tests/temp/blah/glop重定向到t emp.php,與$_GET['page']方含 '嗒嗒'或'blah/glop'


這就是通常做什麼用的Zend Framework進行,例如(見here爲參考)

0

你有什麼理由使用這些範圍的字符?

爲什麼不使用:

RewriteRule ^(.*)$ index.php?page=$1 

而且危險的是使用這樣的事情是,你可以錯過「頁」 GET變量。我不確定哪個優先,但這兩個都是不好的行爲。

例子我見過的這種行爲不通過傳遞路徑作爲GET參數,而是使用PHP來從$_SERVER['REQUEST_URI')

0

提取它,如果你只想讓人物[A-Za-z0-9-]在每個path segments,試試這個:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([A-Za-z0-9-]+(/[A-Za-z0-9-]+)*)/?$ index.php?page=$1 [QSA,L] 

順便說一句:你應該選擇一個拼寫,帶或不帶斜線,然後重定向,如果是其他的形式。