2011-05-05 83 views
3

我是新的URL重寫。通過輸入mod重寫規則,Ajax和管理請求停止工作

我已經在.htaccess文件中寫了一些重寫規則。我的問題是,ajax請求和管理部分(兩者都由不同的文件管理,名爲ajax.php和admin.php)完全不起作用。

以下是我嘗試使用國防部重寫來實現:

的網址:http://websitename/index.php?page=rr&cn=abc&cid=1
應該是這樣的:http://websitename/rr/abc/1
在瀏覽器的地址欄


URL(只有「頁面」值):http://websitename/index.php?page=register
應該是這樣的:http://websitename/register
在瀏覽器的地址欄


的網址:http://websitename/index.php?page=i&in=banking&iid=12
應該是這樣的:http://websitename/industry/banking/12
在瀏覽器的地址欄


的網址:http://websitename/index.php?page=cr&cn=pqr&rid=12
應該是這樣的:http://websitename/cr/pqr/12
在瀏覽器的地址

到目前爲止,我能夠做到這一點使用下面的規則 但ajax.php和提出的要求admin.php以及一些參數根本沒有工作(頁面未找到錯誤)。

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L] 

這三個國防部重寫規則,做工精細但畢竟是通過名爲一個單獨的文件做了Ajax請求「ajax.php」不工作(未找到頁面錯誤來)

即以下URL應以上述工作的國防部重寫規則
http://websitename/ajax.php?action=vote

http://websitename/admin.php?page=home

(不想有國防部重寫規則的文件ajax.php和admin.php的)

但我無法成功地做到這一點爲ajax.php和admin.php

請幫我對此。我真的堅持這一點。

謝謝

+0

你能舉出一些網址的例子,以及當你不註釋掉第一個時發生了什麼。 – 2011-05-05 10:53:41

+0

我們需要查看網址以獲得幫助。什麼是CSS的網址 - 哪個URL不能正確重寫。用這個信息編輯和更新問題。 – 2011-05-05 12:47:38

+0

我現在編輯了我的問題。 – 2011-05-05 13:42:00

回答

1

從它的外觀看來,您的第二條重寫規則會捕獲您不想重寫的兩個URL。

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

這兩個網址會在上面重寫規則

我建議改變你的htaccess以下內容被拾起,它的所有努力做是趕上admin.php,或ajax.php調用並直接通過發送不變(我沒有檢查過,但它應該沒問題):

Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^/ajax.php(.*)$ /ajax.php$1 [L,QSA] 
RewriteRule ^/admin.php(.*)$ /admin.php$1 [L,QSA] 

RewriteRule ^([A-Za-z0-9-]+)/([^/]+)/([^/]+)$ index.php?page=$1&companyname=$2&companyid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]+)$ index.php?page=$1%{QUERY_STRING} [L,QSA] 

RewriteRule ^view/([^/]+)/([^/]+)/([^/]+)$ index.php?page=$1&industryname=$2&industryid=$3%{QUERY_STRING} [L,QSA] 

RewriteRule ^([^/]*)/([^/]*)/review/([^/]*)$ /index.php?page=$1&companyname=$2&reviewid=$3 [L] 
+0

這不起作用。對ajax.php所做的ajax請求不起作用。 「頁面未找到」錯誤。 – 2011-05-12 06:46:10

+0

也許嘗試刪除絕對引用,並使其相對(而不是'/ajax.php ..',更改爲'ajax.php ...'),它可能會修復它並匹配您的其他規則出現的方式。您是否檢查過,以確保ajax.php文件存在於被引用的位置,以及相關更改是否無效? – 2011-05-13 00:14:34

+0

這是一個解決方法/黑客,我發現時,擺脫規則。如果我按照某種順序指定規則而不是完美地工作。即我在上面的答案的最後一行之後添加了ajax.php和admin.php規則,然後我將index.php?page = $ 1%{QUERY_STRING}規則移到了ajax.php和admin.php重寫規則之下。仍然測試它的任何錯誤。 – 2011-05-13 07:47:22

0

一個副手的猜測,也許是ajax.php和管理員。由於領先的'/',PHP會被同化到規則2或4中。我對mod_rewrite的確切工作有些朦朧,但它可能與它有關。

嘗試通過規則添加規則並測試admin.php和ajax.php頁面以找出哪些規則正在使這些頁面失敗。

+0

感謝您的回覆。最後的規則產生了問題,這就是爲什麼我在這裏發佈我的問題。如何在不破壞Ajax和管理請求的情況下讓所有規則同時工作?我知道這個任務不是不可能的。 – 2011-05-11 10:51:59

-1

前綴每RewriteRule下列要求:

RewriteCond %{REQUEST_FILENAME} !-s 

有了它,當他們引用不存在的文件,你的規則纔會工作。請求退出文件,特別是ajax.phpadmin.php將被逐字保留。