没有框架>> .htaccess>> RewriteRule给出404错误

时间:2012-07-05 08:15:07

标签: php .htaccess xampp

我被困在一些似乎没什么可怜但又愚蠢的事情上 - 坚持使用.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

我已尝试解决问题:

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

<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>

现在,如果用户在栏中输入了网址:http://localhost/project/hi

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

而不是它给出了404错误。另请注意,转换为Apache的实际请求不应反映在URL栏中作为永久重定向[301]。

有人有解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果该文件 index.php 位于/ public /,那么

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

答案 1 :(得分:1)

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

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

RewriteEngine on
RewriteBase /project/

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

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