0

我想使用 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. 如何在干净 URL 的末尾添加斜杠?
4

2 回答 2

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]
于 2012-07-21T20:02:40.630 回答
0

您可能想摆脱NandF标志。不确定您为什么会被重定向,看起来您拥有的规则对此不负责任。您还想重复两个规则的 2 个条件:

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]
于 2012-07-22T12:56:04.947 回答