如何解决.htaccesss从URL删除文件扩展名和变量
我知道这个问题已经被问过很多次了,但是无论我尝试什么,我仍然无法使我的代码正常工作。我有这个.htaccess文件,我想从此重定向我的代码:
example.com/news/articles.PHP?id=21&artName=Hello-World
对此:
example.com/news/articles/21/Hello-World
Options -MultiViews
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^news/articles/([\w-]+)/(.+) news/articles.PHP?id=$1&artName=$2 [QSA,L,NC]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.PHP -f
RewriteRule !\.PHP$ %{REQUEST_URI}.PHP [QSA,L]
<a href="https://www.example.com/news/articles/21/Hello-World">Article</a>
每当我尝试转到该页面时。我收到“错误404-找不到”页面。我是.htaccess文件编辑的新手,所以请让我知道我在代码中做错了什么,以便在链接中成功重写,谢谢。
解决方法
假设您已经按照注释中的说明在指令上添加了news/
前缀,那么您还需要删除以下规则块:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L]
这是不正确的,将导致以下对/news/articles.php
的重写被跳过。无论如何,这与后来的指令具有相同的作用(并且以后的指令“更好”)。
您可以在.htaccess顶部尝试执行此操作以禁用mod_spelling
选择:
<IfModule mod_speling.c>
CheckSpelling off
CheckCaseOnly off
</IfModule>
Options -MultiViews
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
RewriteRule ^(news/articles)/([\w-]+)/(.+) $1.php?id=$2&artName=$3 [QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
This will disable multiple choice option.
摘要
有时,核心apache服务器无法处理对文档的请求,因为该请求的拼写错误或大小写错误。即使在所有其他模块都放弃之后,该模块也通过尝试查找匹配的文档来解决此问题。它通过将请求目录中的每个文档名称与所请求的文档名称进行比较(不考虑大小写)并允许最多一个拼写错误(字符插入/省略/换位或错误字符)来完成其工作。将使用此策略匹配的所有文档名称建立一个列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。