2012-07-21 80 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

相关问题