2009-10-24 66 views
0
RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L] 

它應該採取任何URL爲什麼這不正確地重寫URL?

mysite.com/someurl 

並將其轉換爲

new.php?url=someurl 

但是它一直打算只new.php

+0

可能的重複:http://stackoverflow.com/questions/1616719/need-a-regex-to-match-url-without-http-https-ftp,http://stackoverflow.com/questions/1616770 /幫助改寫 - 這-URL-簡單但並非工作 – Gumbo 2009-10-24 08:02:02

回答

0

第一支承引用$1不AFAIK。如果不這樣做,請嘗試指定[QSA],儘管我懷疑是否是這樣。

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 
0

第一個後置引用應該是$ 1而不是$ 0。

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 

這也取決於你在文件中哪些代碼等線路。如果你有另一個與它衝突的代碼,也可能搞砸重寫。

2

你需要躲避第二個問號在第一線,因此文字問號匹配:

RewriteCond %{REQUEST_URI} !^/?new.php\?url 

也沒有使用在第二行的括號的組。 $0是好的,或者您可能想要$1。如果您使用$0,你可以把它簡化一堆:

RewriteRule ^.*$ new.php?url=$0 [L] 

還是在另一方面,如果你正在分崩離析的URL是有原因的,我建議一些修正。你沒有完全正確地匹配文件名和擴展名。像這樣稍微複雜的正則表達式可能會做你最好:

RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L] 

說明:

  1. (.*?)相匹配的目錄和文件名。 ?表示非貪婪匹配,所以一旦下一部分匹配就停下來。括號會導致它被捕獲並存儲在$1中。

  2. (?:\.([^.]*))?符合文件擴展名。 ?:圈數表示不捕獲外部圓括號,因此點不在$2中捕獲。 ([^.]*)與擴展名匹配並確保它不包含點。最後的?使文件擴展名部分是可選的,只是不是所有的URL都有文件擴展名。因此,如果有文件擴展名,將只有一個$2