s目录下.htaccess添加第三个URL参数后出现404错误求助
解决方法
问题出在缺少目录基准配置以及规则顺序不够规范,修改后的.htaccess内容如下:
Options -MultiViews RewriteEngine On RewriteBase /s/ # 匹配三个参数的URL RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?random=$1&java=$2&u=$3 [L] # 匹配两个参数的URL RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)$ index.php?random=$1&java=$2 [L] # 匹配单个参数的URL RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)$ index.php?random=$1 [L]
关键修改说明:
- 添加
RewriteBase /s/:你的.htaccess和index.php都在s目录下,这条指令明确告诉Apache重写规则的基准路径,避免路径解析错误导致404。 - 调整规则顺序:把匹配最长路径的规则放在最前面,这是URL重写的规范写法,确保优先匹配更具体的请求(虽然原正则不会误匹配,但能避免潜在的逻辑冲突)。
- 添加
Options -MultiViews:关闭Apache的MultiViews功能,它会自动尝试匹配类似文件名的资源,可能干扰重写规则执行,引发意外的404。
验证方式
访问https://example.com/s/15091722/yes/152030,此时应该能正确转发到index.php,你可以通过$_GET['random']、$_GET['java']、$_GET['u']获取对应的参数值。
内容的提问来源于stack exchange,提问作者Manisha
相关产品推荐
相关产品推荐

