简单的mod_rewrite问题 - php

我有一个很奇怪的问题

我在玩.htaccess,并尝试将所有请求重定向到/ test /文件夹的索引文件。

我的站点位于本地htdocs文件夹中的/ test /文件夹中。当前没有其他文件。

我的期望:
当我访问任何URL时(例如/test/category/one/),应将我重定向到/test/index.php

怎么了
我得到一个404 Not Found

我的.htaccess看起来像这样:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php?__route=$1 [L,QSA]

我尝试设置RewriteBase /test/

这是很直接的,为什么它不起作用?

我在另一个文件夹中有一个Wordpress网站,并且可以完美地与自定义重写一起使用。

我什至将Wordpress的.htaccess内容复制到了测试站点,用/ test /代替了重写基础和最后一条规则。

WordPress的.htaccess :(适用于在同一服务器上的单独WP安装)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php [L]
</IfModule>

# END WordPress

我已经为此苦苦挣扎了一段时间,在没有帮助的情况下阅读了很多SO文章。

我什至写了一个重写日志文件,现在浏览测试站点时什么也没显示,但是访问Wordpress站点会写很多行。

我在Win64机器上运行XAMPP。

任何帮助将不胜感激! =)

参考方案

更新:此外,请确保正确设置.htaccess文件中的行结尾。 Apache有时可以阻塞不包含换行符(\ n)的任何内容。

所以在我看来,您想要(在某种程度上)模仿WordPress在做什么。当我开发一些做相同事情的软件时,这就是我处理这种情况的方式:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.php [L]
</IfModule>

对于存在的文件(即-f-d测试通过),我们将其保留不变。否则,我们会将传入的请求重定向到index.php。请注意,路径的/test部分不包括在RewriteRule中,因为RewriteBase设置了我们的起始位置。因此,在您的示例中,我认为最终将是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^(.*)$ /index.php?__route=$1 [L,QSA]
</IfModule>

FWIW,我不是.htaccess专家。过去,我只是发现这对我有用。

另外,如果您使用共享主机(例如DreamHost),则可能需要设置适当的规则以允许使用默认错误文档。一些共享的Web主机会为错误情况提供一个文件(failed_auth.html是一个示例)。如果您没有过滤掉这种情况,则可能会以404结尾。

mod_rewrite:控制器的子域 - php

所以我有mydomain.tld,www.mydomain.tld和res.mydomain.tld都指向同一目录:/var/www/mydomain。在该目录中,有我的codeigniter应用程序。因此,我想做的是将通过res.mydomain.tld发出的所有请求转发到称为resources的特定控制器。我有的:RewriteCond %{HTTP_H…

使用mod_rewrite删除.php - php

如何更改此URL:http://localhost/index.php/Department/2对此:http://localhost/index/Department/2谢谢。 参考方案 尝试以下规则:RewriteRule ^index/(.*) index.php/$1 如果您也想剥离index/,请尝试以下操作:RewriteCond %{REQUE…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…