为什么我的htaccess规则不能很好地工作?
问题描述:
我想用这些样式使用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个问题:
- 为什么我重定向到本地主机,为什么上面的代码不工作?
- 如何添加一个尾部的斜杠到干净的URL结尾?
答
添加 RewriteBase/ 应该帮助
-
更改规则
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]
答
您可能想摆脱N
和F
标志。不知道你为什么被重定向,它看起来不像你负责的规则。你也想重复两个条件你有两个规则:
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
没有任何代码行不能指示我想要的。它超过规则#1,并且不能与规则#2匹配。所以我得到Forbidden的信息... – 2012-07-21 20:10:41
你应该删除标志[N]和[F] – freytag 2012-07-21 20:14:58
你自己试试freytag? – 2012-07-22 09:57:59