2015-04-27 29 views
0

我要的是這個鏈接歧途問題重寫網址查詢字符串

gallery/1 

將前往

gallery.php?id=1 

和我在我的.htaccess文件寫的是

RewriteRule ^gallery/(.*)? gallery.php?id=$1 

它讓我得到這個id,因爲我想要但頁面上沒有任何東西顯示出來,因爲它現在假設全部文件路徑以gallery開頭。就像當一個圖像的路徑應該是img/icon.png,現在是gallery/img/icon.png,所以它不會顯示出來。如何解決這個問題?我想我誤解了一些關於URL重寫的內容。

回答

1

URL中的額外斜槓改變相對URL基地。您內容中的所有相關網址都將使用不正確的網址。您可以通過使用絕對的URL(開始於/)無論是解決這個問題或在您的網頁的標題中加入鹼:

<base href="/" /> 
+0

解決問題。所以你說這與.htaccess規則無關? –

+0

@BatuZet Jon的回答是正確的。你也可以在鏈接前使用'/',但這需要你全部更新它們。基地標籤是一個更快更簡單的修復。 –

+0

@BatuZet規則本身並沒有打破你的鏈接,但是規則確實使瀏覽器轉到了一個帶有額外的'/'URL的URL,瀏覽器(對規則的內部重寫一無所知)只是認爲'/ gallery /'是預先填充內容中所有相對URL的基礎。如果你使用絕對URL,這不會發生。 –

2

我認爲這個問題是你的圖像來源,而不是你的.httaccess。如果您的圖像使用

src="img/icon.png" 

,你在yourwebsite.com/gallery,那麼你的圖像將變得yourwebsite.com/gallery/img/icon.png

嘗試將源更改爲包含完整URL (yourwebsite.com/img/icon.png)或從根(/img/icon.png)開始的路徑。

2

mod_rewrite中,如果滿足一個或多個條件,則可以指示某些重寫規則適用僅限於

在這種情況下,你想要的規則只適用如果URI開始gallery

RewriteCond %{REQUEST_URI} ^gallery 
RewriteRule ^gallery/(.+) gallery.php?id=$1 
+1

您的條件永遠不會匹配,這將導致重寫規則不被執行,因爲REQUEST_URI需要URI中的前導斜槓。此外它是多餘的,因爲重寫規則已經與之相匹配。 –

2

你的RewriteRule之前缺少RewriteCond。試試這個:

RewriteCond "%{REQUEST_URI}" ^gallery 
RewriteRule ^gallery/([0-9]+) /gallery.php?id=$1 

(.*)?表達不正確,因爲*將匹配零個或多個字符(你想一個或多個數字,從你的例子),並?是多餘的*使用。

+1

您的規則在htaccess中將無法正常工作。這也是REQUEST_FILENAME的不正確使用。雖然我同意他不應該使用貪婪的'*'不知道爲什麼這被提高了兩倍。 –

+0

現在應該修復,謝謝。 – Mikkel