2015-05-29 76 views
1

我想URL是這樣的:localhost/dir/images/pic1.jpg重寫規則行事詭異

被rewriten到:localhost/dir/subdir/index.php?folder=images&picture=pic1.jpg

所以我把很簡單的.htaccess文件中localhost/dir/

RewriteEngine On 
RewriteRule ^(.*)/(.*)$ subdir/index.php?folder=$1&picture=$2 [L] 

,並期望得到folder='images'picture='pic1.jpg'localhost/dir/subdir/index.php,但是我有folder='subdir'picture='index.php'

 

奇怪的是,當我修改.htaccess文件來調用同一個目錄(而不是從「子目錄」)的index.php它工作得很好:

RewriteEngine On 
RewriteRule ^(.*)/(.*)$ index.php?folder=$1&picture=$2 [L] 

我得到folder='images'picture='pic1.jpg'localhost/dir/index.php腳本

回答

1

發生這種情況是因爲您的重寫規則正在循環並將目標字符串subdir/index.php與模式.*/.*匹配。

使用此條件來停止循環:

RewriteEngine On 

# If the request is not for a valid directory 
RewriteCond %{REQUEST_FILENAME} !-d 
# If the request is not for a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/(.*)$ subdir/index.php?folder=$1&picture=$2 [L] 
+1

我並沒有意識到,單一的規則可以被稱爲不止一次。我讀了幾個教程,沒有一個提到過這個問題,或者警告過關於循環的可能性。他們應該把它寫成大紅色的字母;)非常感謝! –

+0

很高興爲你效勞。是的,大部分教程集中在語義上,但不解釋整個流程單詞的含義。 – anubhava