2012-07-21 82 views
0

我想用這些樣式使用htaccess和mod_rewrite製作2種類型的URL。爲什麼我的htaccess規則不能很好地工作?

http://www.site.com/product 
http://www.site.com/product/1/something 

對於這一點,我已經添加了這些行的htaccess文件:

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&id=$2&des=$3 [N] 
RewriteRule ^([^/]*)$ /index.php?p=$1 [F] 

但每當我跑我的應用程序,並提示的http://本地主機/項目/,Web服務器重定向我到http:// localhost/

現在我有2個問題:

  1. 爲什麼我重定向到本地主機,爲什麼上面的代碼不工作?
  2. 如何添加一個尾部的斜槓到乾淨的URL結尾?

回答

1
  1. 添加 RewriteBase/ 應該幫助

  2. 更改規則

    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?p=$1&id=$2&des=$3 [N] 
    RewriteRule ^([^/]*)/?$ /index.php?p=$1 [F] 
    

最後的.htaccess應該是這樣的:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?p=$1&id=$2&des=$3 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/?$ /index.php?p=$1 [L] 
+0

沒有任何代碼行不能指示我想要的。它超過規則#1,並且不能與規則#2匹配。所以我得到Forbidden的信息... – 2012-07-21 20:10:41

+0

你應該刪除標誌[N]和[F] – freytag 2012-07-21 20:14:58

+0

你自己試試freytag? – 2012-07-22 09:57:59

0

您可能想擺脫NF標誌。不知道你爲什麼被重定向,它看起來不像你負責的規則。你也想重複兩個條件你有兩個規則:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?p=$1&id=$2&des=$3 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)$ /index.php?p=$1 [L,QSA] 
+0

再次提示'http:// localhost/project/product'我重定向到'http:// localhost /':( – 2012-07-22 19:29:16

相關問題