2012-03-27 52 views
1

好,所以我有一個網站需要有2個RewriteRules。htaccess文件需要兩個RewriteRules

首先,如果你去newvendor.business.com它會去newvendor.business.com/newform.php

其次我需要從newvendor.business.com/pending到newvendor.business去。 com/pending/index.php當你點擊與該ID的鏈接。這是htaccess文件適用於第一條規則,但不是等待一條規則。

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z_]+)/?([a-zA-Z_+]+)?/?([0-9]+)?/? $1.php?action=$2&id=$3 [L,QSA] 
RewriteCond %{REQUEST_FILENAME} !-p 
RewriteRule ^pending/([0-9]*)$ /pending/index.php?id=$1 

你能否做到這一點?如果有的話可以有人幫助我嗎?

回答

3

1.關於newform.php位:

表1.A DirectoryIndex

DirectoryIndex newform.php index.php index.html 

優點:

  • 的URI實際上保持 「/」,而不是 「/newform.php」。

缺點:

  • 或許你希望用戶看到「/newform.php」
  • 謹防其子文件夾中的任何地方newform.php - DirectoryIndex的設置是繼承的,你可能最終得到意想不到的結果(雖然這是相當遙遠的情況)。

1.b. RedirectMatch

RedirectMatch ^/$ /newform.php 

優點:

  • 精密 - 只有這個特定URI被重定向(子文件夾不會受到影響)。

缺點:

  • 沒有,我能在此刻

1.C.想到的RewriteRule

RewriteRule ^/$ /newform.php [R,L] 

優點:使用mod_rewrite讓我一個三明治

  • EMM ..?

缺點:

  • 調用mod_rewrite的是不是一個很輕的操作,雖然無關,如果你要使用mod_rewrite的其他規則...

2.休息。 ..

2.1。使用mod_rewrite

RewriteEngine On 

RewriteRule ^pending/([0-9]+)$ pending/index.php?id=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z_]+)/?([a-zA-Z_+]+)?/?([0-9]+)?/? $1.php?action=$2&id=$3 [L,QSA] 

基本上,我改變規則順序,因爲你的「第一次」是一個懸而未決的匹配/ [0-9] + $以及從不超過該點達到控制。

2.2。利用MultiViews

雖然這不會是一個純粹的僅配置解決方案(需要在PHP文件的一些變化),這可以讓你避免使用mod_rewrite ...

所以,爲了做到這一點,您需要啓用MultiViews選項:

Options +MultiViews 

然後你只需建立一個「漂亮」的網址,如「/條/ 123 /編輯」,如果有一個名爲article.php文件,它會被調用,雖然你沒有提到.php擴展名 然後,article.php文件可以抓住$_SERVER["REQUEST_URI"]並解析它認爲合適的方式...

至於掛起/ * - 它可以使用ErrorDocument未決文件夾中的這個場景

ErrorDocument 404 index.php 

然後還要檢查$_SERVER["REQUEST_URI"]

所以,你有它......既沒有mod_rewrite的;)的決定是你的;)

+0

PS在上一個'RewriteCond'行中,** - p **是什麼?它不存在於[mod_rewrite手冊](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond) – poncha 2012-03-27 23:04:18

+0

謝謝,這有助於很多! -p是一個錯誤,所以很抱歉。 – 2012-03-28 16:06:43