RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
它應該採取任何URL爲什麼這不正確地重寫URL?
mysite.com/someurl
並將其轉換爲
new.php?url=someurl
但是它一直打算只new.php
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L]
它應該採取任何URL爲什麼這不正確地重寫URL?
mysite.com/someurl
並將其轉換爲
new.php?url=someurl
但是它一直打算只new.php
第一支承引用$1
不AFAIK。如果不這樣做,請嘗試指定[QSA],儘管我懷疑是否是這樣。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
第一個後置引用應該是$ 1而不是$ 0。
RewriteCond %{REQUEST_URI} !^/?new.php?url
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L]
這也取決於你在文件中哪些代碼等線路。如果你有另一個與它衝突的代碼,也可能搞砸重寫。
你需要躲避第二個問號在第一線,因此文字問號匹配:
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
中。
(?:\.([^.]*))?
符合文件擴展名。 ?:
圈數表示不捕獲外部圓括號,因此點不在$2
中捕獲。 ([^.]*)
與擴展名匹配並確保它不包含點。最後的?
使文件擴展名部分是可選的,只是不是所有的URL都有文件擴展名。因此,如果有文件擴展名,將只有一個$2
。
可能的重複: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