2013-01-21 281 views
1

我以前改變了我的.htaccess文件,這樣我的「子目錄」(13 /),可以通過添加爲「目錄」我用我的主要領域:刪除擴展名爲.php

RewriteCond %{HTTP_HOST} ^(www.)?mydomain.com$ 
RewriteRule ^(/)?$ 13/index.php [L] 

現在我想以除去.php擴展和擴展名如index.php?eventid=3index/something

EDIT#1 [其中something是存儲在數據庫中id的名稱]

我該怎麼做? 以前,我曾在一些PHP框架中工作,但他們已經有專用的url文件。所以我從來沒有想太多。但是這一次,我沒有使用任何框架,所以我需要修改.htaccess

我環顧四周,但無法找到任何可靠的博客/資源。

編輯#2

我子目錄是public_html/13/

www.mydomain.com重定向到www.mydomain.com/13/ 現在我要訪問www.mydomain.com/13/events.php?eventid=1作爲www.mydomain.com/events/44

回答

1
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3 

上面的代碼會重定向http://www.mydomain.com/index/eventid/3/http://www.mydomain.com/index.php?eventid=3

的htaccess是非常靈活的,並且上面創建的變化是一旦你理解了語法,這很容易。您需要閱讀可以使用的正則表達式以及Rewrite模塊必須提供的衆多選項。我的大多數重定向看起來像上面那樣,但很簡單。

編輯:你要找的一個例子是Wordpress,它使用slu to基於比ID號更多的語義來識別頁面。您必須對數據庫中項目的名稱進行url編碼並將其作爲段落存儲在數據庫中,或者找到使數據庫查詢中可用的其他方法來檢索頁面的內容。然後你的htaccess會是這個樣子:

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/?$ $1.php?slug=$2 

在你的PHP,你將需要創建蛞蝓,並將它們存儲在數據庫中,使他們可以作爲您的查詢的ID。

EDIT2:試着改變你的整個htaccess文件,只是這樣的:

<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{HTTP_HOST} ^www\.yourdomain\.com$ [NC] 
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L] 

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/([0-9]+)/?$ $1.php?$2=$3 

</IfModule> 

我已經測試它和它的作品。你的htaccess中的其他東西正在搞亂它。

+0

雅。我在Python框架中使用它 - Django。那真的很簡單。但是現在,我正在使用PHP,所以遇到了問題。我還想知道如何將我的'../ index.php?eventid = 3'部分更改爲'../index/thateventname'',其中'thateventname'可以從數據庫訪問]。 – xan

+0

你的第一個代碼(沒有slug)沒有工作。 如果我嘗試'www.mydomain.com/events/eventid/8'而不是'www.mydomain.com/events.php?eventid = 8',它不會打開頁面。 – xan

+0

這是因爲我忘記了在最後一個斜線後面添加一個問號以使其成爲可選項。雖然靈活,但htaccess也很嚴格。我上面編輯了我的代碼。 – Eric

1

只需使用以下規則:

RewriteRule ^index/([0-9]+)/?$ /index.php?eventid=$1 [QSA,L] 
+0

我編輯了一下我的問題。 – xan

+0

您的代碼無法使用。我試過這個: 'RewriteRule ^(www。)mydomain.com/events.php?eventid=$1 [QSA,L]'打開'www.mydomain.com/events.php/?eventid = 5' – xan