2017-06-10 94 views
1

目標是輸入像爲什麼rewrite_rule只在文件夾存在時才起作用?

https://www.mywebsite/expert/188/name-of-the-expert 

的url和一樣,如果用戶在https://www.mywebsite/expert.php?exp=188

鍵入的內容不其形式

expert.php?exp=188 

返回到服務器工作: 簡單的規則,就像重寫規則^expert-([0-9]*)$ expert.php?exp=$1 [L,NC,QSA]

哪些工作 我有以下rewrite_rule只有工作的時候我物理創建文件夾專家/在我的樹,即/ WWW /專家/

# FRIENDLY URL FOR EXPERTS PROFILE 
Rewriterule ^(.*)expert\/([0-9]*)(\/[a-z0-9\-\']*)?\/?$ expert.php?exp=$2 [L,NC,QSA] 

而且,對於這條規則工作中,我不得不把<base href="/">頁面expert.php以避免與我的所有鏈接資源的錯誤:

無法加載資源:服務器與404狀態響應()

服務器是APACHE名爲OVH一個共享的虛擬主機平臺上。

問題的全碼:

<IfModule mod_rewrite.c> 
RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

# FRIENDLY URL FOR EXPERTS PROFILE 
Rewriterule ^(.*)expert\/([0-9]*)(\/[a-z0-9\-\']*)?\/?$ expert.php?exp=$2 [L,NC,QSA] 
</IfModule> 

回答

1

有像這樣與MultiViews關閉:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

# FRIENDLY URL FOR EXPERTS PROFILE 
Rewriterule ^/?expert/(\d+)/?$ expert.php?exp=$1 [L,NC,QSA] 

選項MultiViews(見http://httpd.apache.org/docs/2.4/content-negotiation.html)所使用的Apache's content negotiation module運行mod_rewrite之前,使文件的Apache服務器匹配擴展。所以如果/file是URL,那麼Apache將服務於/file.html

+1

它完美的工作,但我需要保持第一個反向引用(。*)爲它工作。和html的基礎標籤。任何想法爲什麼? – gentleboy

+1

'base'標記是需要的,因爲您是css/js/images的相對路徑 – anubhava

1

我使用重寫規則使用阿帕奇FallbackResource改變閱讀https://www.adayinthelifeof.nl/2012/01/21/apaches-fallbackresource-your-new-htaccess-command/後。它更像是一個「如果沒有找到頁面,然後運行該頁面,而不是」

<Directory /var/www/> 
    Options Indexes FollowSymLinks 
    AllowOverride None 
    Require all granted 
    FallbackResource /root.php 
</Directory> 

我發現的唯一的事情是,如果URL是確實存在頁面 - 那麼它提供的是不是你的基地新基本頁面'root.php'在我的情況。

+0

有趣的,但我並不需要一個備用的,我需要去到所需的頁面expert.php?EXP = 188 – gentleboy

+0

我用它是expert.php頁面成爲你回退的方式。我寫了一個使用這個想法的nano REST框架,對我來說,主要的入口點是root.php頁面。 –

+0

我會嘗試,但我可能有麻煩,如果我在將來創建專家文件夾,我想另一個備用。你能否基於我的問題申請你的答案,因爲我不知道如何實現它。 – gentleboy

相關問題