2009-05-27 29 views
0

我想要我的網址重寫轉到一個單一的PHP文件:如何在跳過某些文件夾的同時重寫所有網址?

RewriteRule ^dir/(?:(?!style|js).)*$ http://www.domain.com/single.php?uri=$1 [QSA] 

但是排除/ DIR/JS和/ DIR /風格不工作,我希望它會...

  • [重定向] domain.com/dir
  • [重定向] domain.com/dir/jason
  • [重定向] domain.com/dir/jason/pete
  • [不會重定向:好] domain.com/dir/js
  • [不重定向:GOOD] domain.com/dir/js/*
  • [不重定向:BAD] domain.com/dir/ JS

哪有我改變正則表達式以符合我的需求?

+0

你大概意思寫 '*)',而不是 ')。*'。 – Gleb 2009-05-27 02:14:42

回答

2

嘗試用style\b|js\b代替style|js

也許RewriteCond可能是使用像

RewriteCond %{REQUEST_URI} !^/dir/(style|js)($|/) 
RewriteRule ^/dir/(.*)$ http://www.domain.com/single.php?uri=$1 [QSA] 
+0

感謝您幫助我修復破損的語法。你的末尾應該是可選的。否則domain.com/js會重定向。 – 2009-05-27 02:17:26

0

編輯:

domain.com/dir/json不重定向,因爲它不匹配的正則表達式。

原因/ dir/json不重定向是因爲js遵循dir /,而您的正則表達式只匹配當dir /之後沒有樣式或js。我認爲負面看法是錯誤的方法。我想你真正想要的是一樣的東西:

RewriteCond %{REQUEST_URI} !^/dir/(js|style)(/.*)?$ 
RewriteRule ^dir/(.*)$ http://www.domain.com/single.php?uri=$1 [LQSA] 

這基本上意味着,如果URL 與/或JS /樣式(可選與迪爾斯下方進一步路徑組件)結束,然後申請重定向規則。

0

既可用負先行斷言:

RewriteRule ^dir/(?!(?:style|js)(?:/|$))(.*) http://www.example.com/single.php?uri=$1 [QSA] 

但是,這不是那麼好看。

,或者你只是加上如何$1開始另一項測試:

RewriteCond $1 !^(style|js)(/|$) 
RewriteRule ^dir/(.*) http://www.example.com/single.php?uri=$1 [QSA] 
相關問題