2014-04-09 59 views
2

我目前正在嘗試編寫重寫規則。我想簡化輸入的URL,以便它始終使用索引。輸入的網址是www.example.com/home.php,將被重寫爲www.example.com/index.php?r=page/home.htaccess將php重寫爲php文件

我寫這.htaccess文件:

RewriteEngine On 
RewriteRule ^([^/]*)\.php$ /index.php?r=page/$1 [L] 

此配置不幸的是給我一個錯誤500。我可以理解,它是由事實,如果我進入index.php例如,Apache將不知道,如果它造成的必須使用index.php文件或使用重寫的網址index.php?r=page/index

是否有可能用apache完成這種重寫規則?如果是這樣,我該如何解決我的錯誤500?

編輯:請注意,重寫規則工作正常,如果我改變擴展.php到別的如.html,像這樣:RewriteRule ^([^/]*)\.html$ /index.php?r=page/$1 [L]

+1

錯誤500並不意味着你的重寫規則是錯誤的或朝着頁面點它不存在。這意味着您的文件語法錯誤(我沒有看到)或您的配置。你的.htaccess文件還有其他的東西嗎? mod_rewrite是否正確安裝? –

+0

我試着將重寫規則改爲:「RewriteRule ^([^ /] *)\ .pr $ /index.php?r=page/$1 [L]」,當我嘗試訪問www.domain時,它工作正常。 com/home.pr ...所以這是導致錯誤的「.php」。 – Philibobby

回答

1

你有兩種可能性。

第一個

RewriteEngine On 
RewriteRule ^index\.php$ - [L] 
RewriteRule ^([^/]+)\.php$ /index.php?r=page/$1 [L] 

第二個

RewriteEngine On 
RewriteCond %{THE_REQUEST} \ /([^/]+)\.php 
RewriteRule ^.*$ /index.php?r=page/$1 [L] 
+0

很好的答案!正是我在找什麼。非常感謝你。 – Philibobby

+0

我用了第一個,它究竟是如何工作的?破折號是什麼意思? – Philibobby

+1

如果請求'index.php',則第一個不執行任何操作(短劃線表示「不執行任何操作」)。第二個使用'THE_REQUEST':這樣你可以區分內部重定向和原始請求。在這種情況下兩者都相當 –

0

你也可以用這個嘗試:

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