为什么我的htaccess规则不能完美运行?

时间:2012-07-21 19:56:13

标签: php apache .htaccess mod-rewrite clean-urls

我想使用htaccess和mod_rewrite使用这些样式制作两种类型的URL。

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:// localhost / project / 时,Web服务器会将我重定向到 http:// localhost /

现在我有两个问题:

  1. 为什么我会重定向到localhost以及为什么上面的代码不起作用?
  2. 如何在干净的网址末尾添加尾部斜杠?

2 个答案:

答案 0 :(得分:1)

  1. 添加 RewriteBase / 应该帮助

  2. 将规则更改为

    RewriteRule ^([^/]*)/([^/]*)/([^/]*)/?$ /index.php?p=$1&id=$2&des=$3 [N]
    RewriteRule ^([^/]*)/?$ /index.php?p=$1 [F]
    
  3. 最终的.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]
    

答案 1 :(得分: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]