2010-11-12 46 views
0

我知道這個問題已經被問過/回答了好幾次,但我似乎無法通過它。因此,我向你道歉.......htaccess RewriteRule將目錄類型的URL結構轉換爲查詢

而在網站開發階段,我想瀏覽器地址欄顯示:domain.com/dev/item

我想重寫規則將其更改爲:domain.com/dev/index.php?p=item

使用IM .htaccess位於public_html目錄中。 public_html/dev中的.htaccess工作正常,它被配置爲將不使用我的IP的所有人重定向到domain.com。我的apache版本是2.2.15,我已經證實我可以使用.htaccess重定向,但頂級.htacess根本不起作用。這裏是使用了代碼IM:

Options +FollowSymlinks 
RewriteEngine On 
RewriteRule ^dev/(.*)$ dev/index.php?p=$1 [NC] 
#variations tried: ^dev/(.*)+$, ^dev/(.*)+?$ 

的,包括其變型,導致404 /未發現開發/項目。除去開發/從^開發/(.*)$導致正確的URL格式,但以下服務器變量:

[REDIRECT_QUERY_STRING] => p= 
[REDIRECT_URL] => /404.shtml 
[QUERY_STRING] => p= 
[REQUEST_URI] => /dev/item 

我的目標是做一個小的變化,以支持這類改寫爲兩個活網站和開發副本。但我不知道我做錯了什麼。我真的很感激任何幫助。

回答

2

您需要在重寫路徑的開頭指定/。

試試這個:

RewriteEngine on 
RewriteBase/

# If request is for a file that does actually exist, don't rewrite. 
RewriteCond %{REQUEST_FILENAME} !-f 
# If request is for a directory that does actually exist, don't rewrite. 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^/dev/(.*)$ /dev/index.php?p=$1 [NC] 
+0

非常感謝您的答覆。我試過上面的代碼,它導致500內部服務器錯誤。只是出於好奇,如果這是皮塔解釋,不要擔心它,爲什麼我的代碼會導致循環? – grins 2010-11-12 20:53:56

+0

因爲'RewriteRule^dev /(.*)$ dev/index.php?p = $ 1 [NC]'中的'N'表示「在達到這個規則後,開始重寫過程」,並且你的模式替換將匹配該模式再次。 – cdhowie 2010-11-12 20:58:21

+0

另外,你可以看看你的Apache日誌並粘貼錯誤消息? – cdhowie 2010-11-12 21:00:31