2013-09-10 25 views
1

我遇到了一個奇怪的問題。我有一個.htaccess文件,只有當我使這些最底層的兩個條件/重寫不同的文件夾時纔有效。我希望products.php和specs.php頁面都能顯示:www.example.com/products/,然後分別顯示它們各自的URL以獲得相應的網址。現在,我只能得到這個(有點)工作,如果我有不同的文件夾名稱。 Products.php顯示了一個類別中的許多產品的簡要描述(域名後它會顯示/糖果)。規格頁面只顯示一個產品(域名顯示產品線和產品名稱糖果/甜心)。任何幫助將不勝感激!無法使用.htaccess將兩個網址重寫爲相同的文件夾

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

#products.php pages 
RewriteCond %{THE_REQUEST} html/products.php 
RewriteCond %{QUERY_STRING} ^slug=(.*)$ 
RewriteRule ^html/products\.php$ http://www.example.com/products/%1? [R=301,L] 
RewriteRule ^products/(.*)$ /html/products.php?slug=$1 [L] 

#specs.php pages 
#RewriteCond %{THE_REQUEST} html/specs.php 
#RewriteCond %{QUERY_STRING} ^prodslug=(.*)$ 
#RewriteRule ^html/specspage\.php$ http://www.example.com/specs/%1? [R=301,L] 
#RewriteRule ^specs/(.*)$ /html/specs.php?prodslug=$1 [L] 

回答

0

它們必須不同,否則mod_rewrite將不知道自己是產品還是自己的規格。如果URL是:

http://www.example.com/products/asdljfcaijfaewlf 

是否「asdljfcaijfaewlf」是產品的slu??或者它是一個規格的slu??或者它不是?沒有辦法讓mod_rewrite知道,因爲它無法從數據庫或者存儲信息的地方獲取slug。它只知道如何與請求相匹配。這就是爲什麼你需要讓它匹配/products//specs/文件夾,以便知道是否將它們路由到products.phpspecs.php

而且,你的規則有不一致:

RewriteRule ^html/specspage\.php$ http://www.example.com/specs/%1? [R=301,L] 

必須

RewriteRule ^html/specs\.php$ http://www.example.com/specs/%1? [R=301,L] 
+0

謝謝您的答覆。我想我仍然對這個重寫的工作方式有點困惑。我認爲它會一直等到它收到html/products.php的請求,然後它會查看查詢字符串。之後它會重寫。由於每個規則塊具有不同的頁面請求,我認爲它應該能夠寫入相同的文件夾,因爲每個請求都是單獨處理的,並且適用於單獨的頁面。我很困惑! 我確實有一個不一致,但在我的實際腳本中,它不在那裏。我爲這個例子簡化了我的文件名。 – user2213851

+0

@ user2213851在像「http:// www.example.com/products/asdljfcaijfaewlf」這樣的URL中沒有查詢字符串。這是瀏覽器要求的,這是mod_rewrite將用來匹配的內容。然後,根據匹配,將*重寫爲'/ html/products.php'或'/ html/specs.php',並*創建*查詢字符串。 –

+0

哦,我明白了!我仍然從不潔淨的網站的角度來看待它,這當然是不正確的!非常感謝你的幫助!!!! – user2213851