1

我被困在一些看似愚蠢的事情上——被.htaccess RewriteRule 困住了。

问题:

我正在尝试将来自“项目”网站的“不存在”页面的所有流量重定向到 index.php 作为参数“q”。例如,假设用户访问了以下 URL:

http://localhost/project/products/

现在显然没有名为 products 的目录或文件,因此,

对于上面的 HTTP 请求,我想将其翻译为:

http://localhost/project/public/index.php?q=products

设置:

服务器 - 带有 XAMPP 目录结构的 Apache 5.3.x:htdocs/project/public/index.php

为了解决这个问题,我已经做了什么:

在项目目录 >> http://localhost/project/>> 中放置了一个 .htaccess 文件,试图将所有流量转移到公共目录。规则看起来像这样......

<IfModule mod_rewrite.c>
RewriteRule ^$ public/ [L]
</IfModule>

以上工作正常,所有用户都被重定向到 index.php 页面。

使用以下代码将另一个 .htaccess 文件放在公共目录中:

<IfModule mode_rewrite.c>
RewriteCond....
RewriteCond....
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

现在,如果用户在栏中键入 URL:http://localhost/project/hi

我希望它被翻译为http://localhost/project/public/index.php?q=hi

相反,它给出了 404 错误。另请注意,被翻译到 Apache 的实际请求不应在 URL 栏中反映为永久重定向 [301]。

有人有解决方案吗?

4

2 回答 2

1

您的 htaccess 不在服务器根目录上。

然后您必须定义基本 url,并为您的重写规则使用完整路径:

RewriteEngine on
RewriteBase /project/

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

RewriteRule ^(.*)$ /project/public/index.php?q=$1 [L,QSA]
于 2012-07-05T09:21:04.600 回答
1

如果该文件index.php位于 /public/ ,那么您应该这样做

<IfModule mode_rewrite.c>
RewriteCond....
RewriteCond....
RewriteRule ^(.*)$ /project/public/index.php?q=$1 [L,QSA]
</IfModule>
于 2012-07-05T08:56:36.577 回答