.htaccess mod rewrite 适用于 WAMPP 但不适用于 XAMPP

Posted

技术标签:

【中文标题】.htaccess mod rewrite 适用于 WAMPP 但不适用于 XAMPP【英文标题】:.htaccess mod rewrite works on WAMPP but not XAMPP 【发布时间】:2020-01-04 23:47:31 【问题描述】:

我正在尝试编写我的.htaccess 文件,以便网站的所有页面(index.php、sports.php、team.php 和 about.php)都显示为domain/indexteam.php 偶尔也会包含一个 $_GET 变量,我试图将其显示为 domain/team/getvariable。我想出了以下 .htacces:

Options +FollowSymLinks

DirectoryIndex index.php team.php sports.php about.php
RewriteEngine On

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_URI (.+)/$
RewriteRule ^ %1 [L,R] # <- for test, for prod use [L,R=301]

#RewriteRule ^s/(.*)$ ./team.php?s=$1

RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^([^\.]+)$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php

这符合我对 WAMPP 的所有要求,但是使用 XAMPP 托管网站的行为有所不同;重定向到team/getvariable 成功但抛出 404 错误,其余部分运行良好。您还可以看到,我已经尝试了另一种方法,但它的行为方式与当前行相同。我做错了什么?

解决方案 我将最后一行更改为 RewriteRule ^(.*)$ team.php?s=$1 [NC]

【问题讨论】:

【参考方案1】:

您正在将/team/variable 重写为/team/variable.php。我猜这会发生你的 404 错误。

所以我认为您想重写为/team.php?v=variable 之类的东西?那么这应该工作:

RewriteRule ^([^/]+)/([^/]+)/$ $1.php?v=$2

为什么它适用于 WAMPP 是另一个问题......

【讨论】:

我想重写 /team.php?s=variable -> /team/variable 不幸的是,您的解决方案也会抛出 404(将 v 更改为 s 后) 我从你的规则中取出了规则的第一部分,没有检查它。它匹配带有结尾斜杠的 url。所以/team/variable/ 应该可以工作。如此简单地删除 $ 之前的最后一个 / --> RewriteRule ^([^/]+)/([^/]+)$ $1.php?v=$2

以上是关于.htaccess mod rewrite 适用于 WAMPP 但不适用于 XAMPP的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess mod rewrite 适用于 WAMPP 但不适用于 XAMPP

apache mod_rewrite适用于任何可能性的规则

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

子域 mod_rewrite (htaccess) 到相对目录

将 .htaccess 转换为 nginx (mod_rewrite)