2009-09-25 37 views
3

以下重寫傳遞一個字符串與數字4開始作爲變量來process.php:mod_rewrite的:如果/其他類型重寫規則

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(4[^/]*)$ /process.php?variable=$1 [L] 

所以這

http://www.domain.com/4shopping 

被映射到

http://www.domain.com/process.php?variable=4shopping 

但我想擴展這最後一個重寫規則,以基本狀態:

if word begins with 4, map to /process.php?variable=$1 
else map to /index.php 

該聲明的第二個(else)部分是基本的WordPress重寫規則。因此,例如:

http://www.domain.com/shopping 

不具有4將被引導到

http://www.domain.com/index.php?shopping (I believe this is how WordPress permalinks work!) 

回答

3

這裏的解決方案:

RewriteRule ^(4[^/]*)$ /feedback.php?sms_code=$1 [L] 
# 
# BEGIN wordpress 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
# END wordpress 

我留在原地WordPress默認的規則,並加入我自己的條件上面的規則,確保終止[L]處理,如果條件滿足

3

嘗試這種情況:

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^(4[^/]*)$ process.php?variable=$1 [L] 
RewriteRule ^([^4/][^/]*)$ index.php?$1 [L] 

的第一條規則將捕獲可以映射到現有的任何請求文件或目錄,並將結束重寫過程。第二條規則是你的(沒有RewriteCond條件)。第三條規則將捕獲任何URL路徑不以數字4開頭的請求。

+0

由於某些原因,第三條規則不起作用 - 即正常的WordPress網址導致了'文件未找到'錯誤。 – Paul 2009-09-25 19:28:19

+0

使用mod_rewrite的日誌功能來查看發生了什麼問題。請參閱http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevel – Gumbo 2009-09-27 11:05:42

0

我會添加兩行到你已有的結尾。其他規則將轉換爲index.php任何尚未轉換爲process.php的內容。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(4[^/]*)$ /process.php?variable=$1 [L] 

RewriteCond %{SCRIPT_FILENAME} !process\.php 
RewriteRule ^([^/]*)$ index.php?$1 
+0

再說一次,原則上是行得通的,但不是用Wordpress玩球 – Paul 2009-09-26 07:14:10