2013-08-29 69 views
0

我想編寫一個重寫規則來執行以下操作:如果服務器上存在以下任何文件作爲特定目錄中的靜態html文件,那麼我希望.htaccess提供該靜態文件。否則,我想的ID(後第一號的.com/和前第一個連字符),以作爲查詢參數傳遞給www.gallery.com/index.php在.htaccess中使用重寫mod

重定向應該發生的,如果下面的網址不作爲靜態HTML頁面存在。

www.gallery.com/2-swimming.html 
www.gallery.com/2 
gallery.com/2 

下面是我的整個.htaccess文件

<Files .htaccess> 
    order allow,deny 
    deny from all 
</Files> 


<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENANE} !-f 
RewriteCond %{REQUEST_FILENANE} !-d 
RewriteRule ^([0-9]+)-(.*)\.html$ /index.php?id=$1 [L] 
</IfModule> 

有什麼毛病我改寫的條件。(我有一個困難時期)。還有什麼是一個有效的方式來抓住重定向的id incase。

+0

只有當用戶嘗試點擊'.html'地址時,您的重寫小程序纔會啓動,因此您的'gallery.com/2'永遠不會匹配:地址中沒有'.html'和'-'。 –

+0

如何修復'gallery.com/2'和'gallery.com/2-word1-word2.html' – user2726883

+0

2-word1-word2會重寫,因爲'2'會匹配'([ 0-9] +)'部分,'word1-word2'會被'(。*)'抓住。看起來你只關心地址開頭的實際NUMBER,爲什麼不用'Rewriterule ^([0-9] +)/index.php?id = $ 1'來代替呢?這隻會捕獲數量而忽略其他的一切。 –

回答

0

爲什麼不總是把所有東西都傳遞給index.php

PHP是在處理字符串比.htaccess

-f線已經照顧現有的靜態文件的好多了。 (和-d的目錄)


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

匹配此規則和捕捉一切。

+0

如何在HTML靜態頁面不存在的情況下將整個參數作爲字符串傳遞。另外,我如何檢索它並操縱它來查找id。我很抱歉。這是我的第一個項目。 – user2726883

+0

我更新了我的答案。 – Halcyon