Apache 很难重写

Apache 很难重写,apache,Apache,我是Apache重写URL的初学者 我有一个重写URL的问题 我想将www.test.com/abc/index.php?val=123重写为www.test.com/abc/123/index.php 注意:abc是一个文件夹 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/([0-9]+)/index.php $1/ind

我是Apache重写URL的初学者

我有一个重写URL的问题

我想将www.test.com/abc/index.php?val=123重写为www.test.com/abc/123/index.php

注意:abc是一个文件夹

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteRule  ^(.*)/([0-9]+)/index.php $1/index.php?val=$2 [QSA,L]

重写规则中的正则表达式毫无意义。此外,您不能在RewriteRule中引用部分查询字符串,因此您还必须使用RewriteCond来捕获查询参数

试试这个:

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_FILENAME} !-d
RewriteCond  %{QUERY_STRING} val=([0-9]+)
RewriteRule  ^(.+)/index.php $1/%1/index.php [L]
让apache自己帮助您调试表达式总是一个好主意:使用日志功能:阅读两个命令的文档
RewriteLog
RewriteLogLevel
。它们转储所采取的每一步,并允许理解算法中实际发生的事情


所需的所有信息均在中提供。这真的值得一试

如果要在htaccess文件中编写此规则,请添加
RewriteBase
指令

RewriteEngine On
RewriteBase /

我尝试键入test.com/abc/123/index.php,但出现错误。在此服务器上找不到请求的URL/abc/123。是的,如果不存在这样的文件夹,则该错误是有意义的。您在问题中写道,这是您要将请求重写到的最终url:
www.test.com/abc/123/index.php
。这会在文件夹
123
中请求一个文件
index.php
,但它在我的web目录中有abc文件夹。为什么是错误?123不是文件夹请查看test.com/abc/index.php?val=123到test.com/abc/123/index.php。希望你能理解。对不起,我不明白。显然,
123
不是文件夹,这就是为什么会出现错误。但您再次声明,您希望重写该文件夹中的文件。重写到本地路径
/abc/123/index.php
。如果这不是您想要的(我假设是这样),那么您必须解释您实际上想要将请求重写到哪些资源。
123
是您在问题中要求的!我想将index.php?val=123转换为/123/index.php。我们能做到吗?