Php 无框架>>。htaccess>&燃气轮机;重写规则给出404错误

Php 无框架>>。htaccess>&燃气轮机;重写规则给出404错误,php,.htaccess,xampp,Php,.htaccess,Xampp,我被困在一些看起来很愚蠢的事情上——被一条.htaccess规则所困 问题是: 我正在尝试将所有到达“project”webistes“不存在”页面的流量作为参数“q”重定向到index.php。例如,假设用户访问了以下URL: http://localhost/project/products/ 现在显然没有名为products的目录或文件,因此 对于上述HTTP请求,我想将其翻译为: http://localhost/project/public/index.php?q=products

我被困在一些看起来很愚蠢的事情上——被一条.htaccess规则所困

问题是:

我正在尝试将所有到达“project”webistes“不存在”页面的流量作为参数“q”重定向到index.php。例如,假设用户访问了以下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

为了解决问题,我已经做了以下工作:

将.htaccess文件放置在项目目录>>
http://localhost/project/
>>尝试将所有流量传输到公用目录。规则是这样的

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

重写规则^$public/[L]
上面的工作正常,所有用户都被重定向到index.php页面

在公用目录中放置另一个.htaccess文件,代码如下:

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

重写第二。。。。
重写第二。。。。
重写规则^(.*)$index.php?q=$1[L,QSA]
现在,如果用户在栏中键入URL:
http://localhost/project/hi

我想把它翻译成
http://localhost/project/public/index.php?q=hi

相反,它给出了一个404错误。另外,请考虑将实际请求翻译成Apache不应反映在URL栏中作为永久重定向[301 ]。
有人有解决方案吗?

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

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

重写第二。。。。
重写第二。。。。
重写规则^(.*)$/project/public/index.php?q=$1[L,QSA]

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

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

RewriteEngine on
RewriteBase /project/

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

RewriteRule ^(.*)$ /project/public/index.php?q=$1 [L,QSA]

此外,上面没有列出它(因此不确定这是否反映在您的代码中),但是在任何
Rewrite*
上面都需要声明
RewriteEngine on
(除非它在apache配置中显式打开),谢谢Joe…我错过了它…但我确信它是“打开”的在我的开发机器上…不知何故,这东西对我不起作用…谢谢@samx的建议,我会尝试一下,并告诉它是否有效。我也会尝试一下。感谢您输入@Cody