2013-01-19 95 views
1

重定向我還在的.htaccess的工作有點模糊,和我環顧四周,但我無法找到任何幫助這一具體問題。的.htaccess重寫規則不是來自真正的文件夾

編輯:我意識到還有其他問題,似乎他們涵蓋了這個問題,但我檢查了一些,他們似乎沒有提供任何幫助,我可以理解,我不想用我自己劫持他們的問題。

這是我有:

Options +FollowSymLinks 
#RewriteBase/
RewriteEngine on 
RewriteRule /mp3/(.*) http://old.domain.com/mp3/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)$ /index.php?p=$1 [L] 

你可以從最後一行看到,服務器名稱後輸入的字符串實際上是一個URL參數,並根據該參數,不同的內容是從拉數據庫和該頁面顯示在網站上。

我遇到的問題是客戶端有一個名爲「播客」的內容頁面,所以他們會去site.com/podcast,它應該悄悄地重定向到site.com/index.php?=podcast並加載該頁面的內容。不幸的是,客戶端在其服務器上也有一個真實的site.com/podcast/文件夾。因此,重寫被忽略,瀏覽器嘗試加載該文件夾。如果我禁用列表,它會顯示文件列表或禁止的錯誤。

經過一番研究(我還是新來htaccess的),我瞭解到,兩行之前禁用如果路徑分改寫到一個實際的文件或文件夾。不幸的是,註釋掉一個與!-d似乎沒有任何效果,並註釋掉既給了我一個服務器錯誤。

誠然,這裏的問題的一部分是缺乏遠見的。 URL重寫應該已經計劃的一切放在一起過,但它不是,直到該網站基本建成,我被告知,客戶希望「友好的URL」不包括?p=部分。無論如何,也許有辦法解決這個問題。

有一些掛羊頭賣狗肉的.htaccess我可以使用,這將迫使即使輸入的網址指向一個實際存在的文件夾(而不是特定的文件)重寫?如前所述,去除!-d似乎並沒有幫助,雖然我不知道爲什麼。也許我誤解了它的目的。

謝謝你的任何幫助,請手下留情與我,如果我忽略了一些東西明顯。這是客戶現場直播的一個問題,所以我在解決這個問題時會感到有些慌亂。再次感謝。

噢,並將該溶液不能特定到/podcast。該方法的客戶端的站點設置,當他們要創建一個新的站點子頁面,一個新的名稱保存基於他們對網頁的標題,內容,並有可能(可能性不大,但仍可能)是另一個頁面可以使用與服務器上現有文件夾相匹配的名稱創建。

+0

您可以通過site.com/index.php?=podcast正常訪問嗎? – Agilox

+0

是的。這通常工作,因爲它沒有指向/ podcast文件夾。 – vertigoelectric

回答

3

這裏是mod_rewrite documentation一張紙條:

默認情況下,mod_rewrite的將忽略映射到一個網址目錄在 磁盤上,但缺少一個斜線,期望mod_dir 模塊將發出客戶端重定向到規範網址 後斜線。

這解釋了爲什麼mod_rewrite忽略URL /podcast。我建議你重命名物理目錄,以便不要(不小心)匹配文章名稱。

另一種選擇是禁用DirectorySlash設置。這將阻止Apache將/podcast重定向到/podcast/

DirectorySlash Off 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)$ /index.php?p=$1 [L] 

但是要注意,禁用此設置有副作用。首先閱讀文檔。

+0

謝謝。暫時,我只是在podcast文件夾中創建了一個'index.php',這樣就不用加載文件列表,而是將訪問者指向預期的內容。我的老闆說這沒什麼問題,我們不用再擔心了,所以我認爲這是爲了向客戶解釋URL無法與文件夾匹配。但是,這對學習仍然有好處,我會接受你的答案。再次感謝。 – vertigoelectric

0

更改以下行的代碼:

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

RewriteRule ^(podcast([^?]*)) index.php?p=$1 [L,NC] 
+0

這與此相反。它實際上打破了所有其他URL,然而'/ podcast'仍然顯示目錄列表。 – vertigoelectric

+0

此外,雖然有針對性的修補程序暫時會有所幫助,但從長遠來看,我將需要一種可用於任何文件夾的解決方案,而不僅僅是名爲「播客」的解決方案。 – vertigoelectric

+0

有些不妥。請嘗試:RewriteRule ^(podcast([^?] *))index.php?p = $ 1 [L,NC] – Agilox