微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.htaccesss从URL删除文件扩展名和变量

如何解决.htaccesss从URL删除文件扩展名和变量

我知道这个问题已经被问过很多次了,但是无论我尝试什么,我仍然无法使我的代码正常工作。我有这个.htaccess文件,我想从此重定向我的代码

example.com/news/articles.PHP?id=21&artName=Hello-World

对此:

example.com/news/articles/21/Hello-World

当前,我的.htaccess文件中包含以下代码

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]

这是该文章的href链接

<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 举报,一经查实,本站将立刻删除。