1

因此,我设法使用 .htaccess 文件重写了 url,但重定向弄乱了 url。例如我尝试重写这个:

localhost/mysite/public_html/class/5/

进入这个:

localhost/mysite/public_html/index.php?v=class&id=5

我在 .htaccess 文件中使用以下行:

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ ./public_html/index.php?v=$1&id=$2 [L,R]

但浏览器将我重定向到这里(我在 Windows 7 上使用wamp ):

localhost/C:/wamp/www/mysite/public_html/index.php?v=class&id=5

这是错误的,让我收到 403 错误。我应该怎么办?

4

4 回答 4

2

您的规则需要如下所示:

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /public_html/index.php?v=$1&id=$2 [L,R]
于 2012-07-29T00:46:24.227 回答
2

问题必须来自替换函数中的 ./ (./public_html/index.php)。重写规则匹配您放置在 ^ 和 $ 之间的正则表达式,然后仅用您的第二部分替换它。我假设您在规则之前已经有某种 rewritecond,所以请尝试删除“./”

尝试将您的 rewritecond 更改为:

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

这意味着如果请求的 URL 不是文件或目录,那么它将继续执行并尝试您的 rewriterule

于 2012-07-28T14:18:24.280 回答
1

我不知道你以前有哪些规则,但你的最小 htaccess 应该是这个:

RewriteEngine On
RewriteBase /mysite/

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

RewriteRule ^public_html/([A-Za-z]+)/([0-9]+)/?$ /mysite/public_html/index.php?v=$1&id=$2 [L,R]

避免./在您的规则中使用,并且不要忘记位置路径必须包含您的mysite文件夹

于 2012-07-29T00:51:13.173 回答
1

这太不可思议了。该错误是 Firefox 缓存的结果。我用了 Chrome,没问题。所以我清除了 Firefox 的缓存,一切正常。

于 2012-07-30T11:51:20.140 回答