如何解决mod重写htaccess问题
底部的 4 条重写规则工作正常,但是一旦我添加了第一条规则,以便我可以在标准页面(例如 about.PHP)中隐藏 .PHP 扩展名,那么最后一条规则就停止工作了?
>根据最后一条规则,我希望 URL 为 domain.com/123,但页面实际上是 /offer.PHP?id=123
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.PHP -f
RewriteRule ^(.*)$ $1.PHP
RewriteRule ^preview/([^/]*)$ /create-preview.PHP?id=$1 [L]
RewriteRule ^update/([^/]*)$ /update.PHP?id=$1 [L]
RewriteRule ^delete/([^/]*)$ /delete.PHP?id=$1 [L]
RewriteRule ^([^/]*)$ /offer.PHP?id=$1 [L]
解决方法
像这样:
Options -MultiViews
RewriteEngine On
RewriteRule ^preview/([^/]+)/?$ create-preview.php?id=$1 [L,QSA,NC]
RewriteRule ^(update|delete)/([^/]+)/?$ $1.php?id=$2 [L,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ offer.php?id=$1 [L,QSA]
变化是:
- 禁用
MultiViews
(内容协商),因为有 2 种情况 php 文件名与起始路径名相同,即/update
和/delete
。 - 使用正则表达式将上述 2 条规则合二为一
- 将
php
扩展规则放在这些规则之后和最后一个前端控制器规则之前 - 最后的前端控制器规则需要 2
RewriteCond
才能跳过物理文件和目录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。