2012-01-24 65 views
-2

這不起作用:mod_rewrite並沒有表現如預期

RewriteRule ^([^/]+)([/]?)$ /index.cgi?l=$1 [NC,L] 

這不起作用:

RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L] 

有.htaccess文件中沒有其他規則。以下是完整版本:

Options -Indexes 
Options ExecCGI 
AddHandler cgi-script .cgi .pl .q 
ErrorDocument 500 /error500.cgi 
ErrorDocument 404 /error404.cgi 
Options +FollowSymlinks 
RewriteEngine On 
RewriteBase/
RewriteRule ^([^/]+)/?$ /index.cgi?l=$1 [NC,L] 

這並不工作,但它不是我想要的。

RewriteRule ^([^/]+)/([^/]+)$ /index.cgi?l=$1&a=$2 [NC,L] 

我希望第一個斜槓和第二個目錄都是可選的。爲什麼問號不會匹配0或1個實例?我在這裏很生氣......

+2

到底什麼,你的意思是「不工作」?從一開始就解釋你想要做的事情。 – 2012-01-24 22:57:43

+0

對不起,我試圖將'目錄'名稱作爲變量傳遞給CGI腳本。但是第二個'目錄'可能會或可能不會被請求,與前面的正斜槓一樣。 – freeworlder

回答

0

通過使用$,您指定它是文本的結尾,因此在/之後不會匹配任何內容。 (在正則表達式,^指定字符串的開頭和$指定結束)

您可以刪除$,那麼就會使第二個參數可選 - 聽起來就像你在找什麼。

試試這個,看看你的mod_rewrite工作正常:

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [R,L] 
+0

'code'RewriteRule ^([a-z] +)/?([a-z] +)? /index.cgi?l=$1&a=$2 [NC,L]'code' 生成以下Apache錯誤頁面: Found 該文檔已移至此處。 [與請求相同的鏈接] 此外,嘗試使用ErrorDocument處理請求時遇到500內部服務器錯誤錯誤。 Apache/1.3.37服務器在www.mysite.org端口80 – freeworlder

+0

嗯,我想知道是否需要'$'。所以試試這個:'RewriteRule ^([^ \ /] +)\ /?(。+)?$'這應該給你第一個/的內容。 –

+0

我試過你的建議。這一次,我設置了R標誌,使其重定向,我可以看到它的發生地點,這是我得到的URL(支撐自己): http://www.mysite.org/index.cgi?l=http:&a=/ www.mysite.org/ 它正在測試整個URL? – freeworlder