【问题标题】:No Framework >> .htaccess >> RewriteRule gives 404 Error没有框架 >> .htaccess >> RewriteRule 给出 404 错误
【发布时间】:2023-03-03 05:49:21
【问题描述】:

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

问题:

我正在尝试将所有进入“项目”网站的“不存在”页面的流量作为参数“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>

以上工作正常,所有用户都被重定向到 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]。

有人有解决办法吗?

【问题讨论】:

  • 此外,它没有在上面列出(所以不确定这是否反映在您的代码中)但 RewriteEngine on 需要在任何 Rewrite* 上方声明(除非它在 ​​apache 配置中显式打开)
  • 谢谢乔……我错过了它……但我确信它在我的开发机器上是“开启”的……
  • 不知何故这对我不起作用......

标签: php .htaccess xampp


【解决方案1】:

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

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

RewriteEngine on
RewriteBase /project/

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

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

【讨论】:

  • 感谢@samsamX 的建议,我会试试看是否有效
【解决方案2】:

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

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

【讨论】:

  • 我也会试试的。感谢您输入@Cody
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 2015-07-18
  • 2022-09-22
  • 2018-06-18
  • 2022-12-10
  • 2012-11-10
相关资源
最近更新 更多