首页 > 解决方案 > 为什么这个mod不重写触发器?(更新:相对和绝对重写路径)

问题描述

我有这个.htaccess

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^contact/([a-zA-Z]*)/([0-9]*)/?$ /contact/new.php?unit_id=$2&unit_type=$1 [NC,L]

我已经对照两个在线 htaccess 验证器(一个在这里)对此进行了检查,但看不出它为什么不触发。

尝试的网址:

https://morris.website.co.uk/contact/ee/1302

这将转到 404 页面未找到链接。

但是手动将 URL 设置为

https://morris.website.co.uk/contact/new.php?unit_id=1302&unit_type=ee

工作正常。

位于.htaccess子文件夹 ( /contact)中

根文件夹.htaccess没有任何其他相关的 mod 重写,但它确实设置了错误页面和一些其他全局设置:

ErrorDocument 400     /index.php
ErrorDocument 401     /index.php
ErrorDocument 403     /index.php
ErrorDocument 404     /index.php
Options -Indexes

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Header always set Strict-Transport-Security "max-age=31536000;" "expr=%{HTTPS} == 'on'"

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteCond  %{REQUEST_URI}  !^$
RewriteCond  %{REQUEST_URI}  !^/
RewriteRule  .*              -    [R=403,L]

我确定这很愚蠢,但我就是不明白为什么/contact/.htaccess会失败?

标签: apache.htaccessmod-rewrite

解决方案


在写问题时;我发现将代码放在根路径 .htaccess中,然后删除特定文件夹.htaccess(我之前错过的关键部分)似乎可以解决问题。

看起来特定文件夹.htaccess不喜欢绝对路径重写。


推荐阅读