2011-08-16 185 views
0

的想法:我希望把它任何東西的域名後到來和結束以.html由index.php文件作爲GET變量處理問題與阿帕奇(與WAMP)的mod_rewrite

例子:www.test.ro/1/2/3.html實際上應該是www.test.ro/index.php?var=1/2/3.html

www.test.ro被設置爲虛擬主機進行開發,並且AllowOverride具有值All。

.htaccess文件似乎被處理,但不是所有的時間。如果我編寫一個不可識別的規則,如'BizzareRule',則服務器工作時不會返回代碼500錯誤。 如果我在<IfModule mod_rewrite.c></IfModule>之間放置了正確的規則,即使我有其他使用相同條件並完美工作的虛擬主機,也會得到500錯誤。

這裏是我的虛擬主機的內容:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.test.ro 
    ServerAlias test.ro 

    DocumentRoot D:/Projects/grabsite/test.ro 
    Options Indexes FollowSymLinks MultiViews 

    DirectoryIndex index.php index.html 

    LogLevel warn 
    ErrorLog D:/Projects/grabsite/test.ro/error.log 
    CustomLog D:/Projects/grabsite/test.ro/access.log combined 

    <Directory "D:/Projects/grabsite/test.ro"> 
     Options -Indexes FollowSymLinks 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 
</VirtualHost> 

和測試內容的.htaccess:

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

回答

1

看來你在無限循環進入。首先嚐試簡化規則: RewriteRule ^(.*)\.html$ /index.php?seo=$1 [L]

或者只是 RewriteRule ^index.html$ /index.php?seo=$1 [L]

其次,最好有-f的RewriteCond和的RewriteCond爲了不如果要求現有的文件/文件夾執行規則-d。在某些情況下,這可以防止規則中的無限循環

0

問題在於正則表達式模式。你說:「.htaccess文件似乎被處理,但不是所有的時間」

如果您檢查模式^/?([^/]*)\.html$你會看到,這會爲文件在根文件夾的工作ONLY(例如/index.html)。

解決方案:變化圖案^(.+)\.html$和所有將被罰款 - 現在將匹配以html的(例如/index.html以及/hello/pink-kitten.html等)結束ANY URL。