htaccess - 将所有文件重写为 index.php,除了 sitemap.xml

     2023-02-24     200

关键词:

【中文标题】htaccess - 将所有文件重写为 index.php,除了 sitemap.xml【英文标题】:htaccess - Rewrite all files to index.php except sitemap.xml 【发布时间】:2018-04-03 06:31:48 【问题描述】:

我正在尝试将每个 php 文件重定向到 index.php,sitemap.xml 除外。问题是sitemap.xml 也被重定向到index.php。 如何将所有php文件重定向到index.php和sitemap.xml到sitemap.php?

重写引擎开启 RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\ [NC] 重写规则 ^ %1 [R=301,L] RewriteCond %REQUEST_FILENAME !-d RewriteCond %REQUEST_FILENAME -f RewriteRule ^/?(.*)\.php$ index.php [L,QSA] RewriteRule sitemap.xml sitemap/sitemap.php [L]

【问题讨论】:

sitemap.xml 是否作为物理文件存在? 不,它不存在。我从一个名为 sitemap.php 的 php 文件动态生成它 【参考方案1】:

您需要一个额外的 RewriteCond 来排除 sitemap.php,否则当请求 sitemap.php 时,它将满足 !-d-f 两个条件,并再次被重写为 index.php

RewriteEngine On
RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\ [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME -f
RewriteCond %REQUEST_FILENAME !/(sitemap.php)/
RewriteRule ^/?(.*)\.php$ index.php [L,QSA]
RewriteRule sitemap.xml sitemap/sitemap.php [L]

【讨论】:

如果您删除 CondPattern 上的斜线后缀,那么这应该“有效”。【参考方案2】:

sitemap.xml 被重写为 sitemap/sitemap.php,但随后重写过程重新开始(在 .htaccess 中),sitemap/sitemap.php 然后在第二遍被重写为 index.php

对于您希望允许直接访问的任何现有.php 文件,您应该在文件顶部添加一个“例外”。例如:

RewriteRule ^(index|sitemap/sitemap)\.php$ - [L]

这将防止/index.php/sitemap/sitemap.php 被随后的指令处理(并被重写为index.php)。 index.php 目前“有效”只是因为 mod_rewrite 稍后检测到您正在回写自己并忽略第二次重写。


RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\ [NC]
RewriteRule ^ %1 [R=301,L]

旁白:我不确定这应该做什么,但我不认为这是在做你认为它在做什么?事实上,我不认为这是在做任何事情!? CondPattern 上的尾随反斜杠(转义字符)是这里的问题。看起来您正在尝试匹配请求 URL 之后(和协议之前)的 空格,但这不是这里会发生的,在 CondPattern 末尾时间>。 “问题”是 space 也是 Apache 配置文件中的参数分隔符。为了匹配 pattern 末尾的 space,您应该使用 \s(任何空白字符)速记字符类,或者将 CondPattern 在双引号中,或包含协议的前几个字符(例如HTTP)。例如:

RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\s RewriteCond %THE_REQUEST "^[A-Z]3,\s([^.]+) "(如果用双引号括起来,转义空格是可选的) RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\ HTTP

NC 标志大多是多余的,除非您也试图捕获无效请求?任何合法的浏览器请求都会将方法和协议全部大写。

但是,如果这确实匹配(带有尾随空格),那么对于任何不包含 .(字面点)的 URL,您将获得一个重定向循环。因此,无论哪种方式,它看起来都不正确。 (?)

【讨论】:

使用 Nginx 使用 try_files 将所有对不存在文件的请求重写为 index.php

...间】:2014-01-0307:31:47【问题描述】:我正在尝试将琐碎的htaccess文件转换为Nginx,但无法使其工作。它返回404错误。这是htaccess的内容:RewriteCo 查看详情

.htaccess - 将所有内容静默重写/重定向到内部子文件夹

】.htaccess-将所有内容静默重写/重定向到内部子文件夹【英文标题】:.htaccess-silentlyrewrite/redirecteverythingtointernalsubfolder【发布时间】:2014-12-1120:49:08【问题描述】:假设我有这个www.example.com网站结构:/srv/http//srv/http/site/index.php/sr... 查看详情

htaccess 重写条件将 css 和 js 文件更改为索引页面内容

】htaccess重写条件将css和js文件更改为索引页面内容【英文标题】:htaccessrewriteconditionchangingcssandjsfilestotheindexpagecontent【发布时间】:2014-01-1701:00:14【问题描述】:我最近完成了有关PHPMVC的阅读,我想做一个MVC的ajax版本,但我遇... 查看详情

.htaccess 重写 GET 变量

】.htaccess重写GET变量【英文标题】:.htaccessrewriteGETvariables【发布时间】:2011-12-0209:17:45【问题描述】:我有一个index.php来处理所有路由index.php?page=controller(简化),只是为了将逻辑与视图分开。Options+FollowSymlinksRewriteEngineonRewrit... 查看详情

.htaccess 没有文件夹的根重写

】.htaccess没有文件夹的根重写【英文标题】:.htaccessRootRewriteWithoutFolders【发布时间】:2015-05-1803:01:38【问题描述】:我花了无数小时寻找类似的问题,并找到了对我不起作用的解决方案。我有一个带有\'id\'GET变量的index.php,可... 查看详情

除了我在 htaccess 中的第一条规则之外,我如何重写所有内容?

】除了我在htaccess中的第一条规则之外,我如何重写所有内容?【英文标题】:HowcanIrewriteeverythingbutmyfirstruleinhtaccess?【发布时间】:2013-08-0321:20:27【问题描述】:我需要将特定格式的所有URL重写为匹配的查询字符串URL,其他所有... 查看详情

.htaccess - 将所有 URL + 现有目录重定向到 index.php

】.htaccess-将所有URL+现有目录重定向到index.php【英文标题】:.htaccess-RedirectAllURLs+ExistingDirectoriestoindex.php【发布时间】:2019-11-2922:40:13【问题描述】:我需要能够将目录中的所有URL绝对重定向到目录中的index.php文件。与我找到的... 查看详情

htaccess 将所有请求重定向到 index.php,子文件夹除外

】htaccess将所有请求重定向到index.php,子文件夹除外【英文标题】:htaccessredirectallrequestestoindex.phpexceptsubfolder【发布时间】:2012-12-0711:49:06【问题描述】:我在域的根目录安装了一个CMS,并使用以下htaccess:RewriteEngineOnRewriteBase/Re... 查看详情

将代码从 htaccess 重写为 nginx 配置?

】将代码从htaccess重写为nginx配置?【英文标题】:Rewritecodefromhtaccesstonginxconfig?【发布时间】:2013-11-2921:37:38【问题描述】:我在将我的重写代码从htaccess文件实现到nginx配置时遇到问题。我已经尝试过生成器:http://winginx.com/htacc... 查看详情

在htaccess中重写URL时添加.html?

】在htaccess中重写URL时添加.html?【英文标题】:Add.htmlwhenrewritingURLinhtaccess?【发布时间】:2011-06-0107:33:09【问题描述】:我正在重写我网站上所有以.php结尾和/或具有动态URL的URL,以便它们是静态的并且对搜索引擎更友好。我正... 查看详情

.htaccess 中的重写引擎以捕获不以 html 结尾的文件

】.htaccess中的重写引擎以捕获不以html结尾的文件【英文标题】:Rewriteenginein.htaccesstocatchfilesnotendinginhtml【发布时间】:2010-10-1021:07:49【问题描述】:我想在标准LAMP托管情况下使用modrewritein将/directory等网页地址转换为/directory/inde... 查看详情

htaccess 用最终的子文件夹重写 url

】htaccess用最终的子文件夹重写url【英文标题】:htaccessrewriteurlwitheventualsubfolder【发布时间】:2021-10-1710:19:15【问题描述】:我有这样的网址:https://mywonderfulsite.com/page我的.htaccess将其重写为https://mywonderfulsite.com/index.php?source=page.... 查看详情

将多个 php 文件视为目录,htaccess

】将多个php文件视为目录,htaccess【英文标题】:Treatmorethanonephpfileasdirectory,htaccess【发布时间】:2016-11-0412:05:55【问题描述】:我是htaccess文件的新手,我了解如何对URL进行基本的重写,例如删除index.php、扩展名等。我还可以使... 查看详情

协助 .htaccess 文件夹重写

】协助.htaccess文件夹重写【英文标题】:Assistancewith.htaccessfolderrewrite【发布时间】:2012-12-1707:09:33【问题描述】:我想对我网站上的图片上传器进行.htaccess重写,但是对于我尝试过的所有教程,我都无法正常工作。目前,我的代... 查看详情

用 nginx 重写所有对 index.php 的请求

】用nginx重写所有对index.php的请求【英文标题】:Rewriteallrequeststoindex.phpwithnginx【发布时间】:2012-10-0703:42:57【问题描述】:在我的apache配置中,我有以下简单的重写规则除非文件存在,否则将重写为index.php在您从未看到文件扩... 查看详情

PHP/Apache:用 .htaccess 重写规则

】PHP/Apache:用.htaccess重写规则【英文标题】:PHP/Apache:Rewriteruleswith.htaccess【发布时间】:2011-10-2208:56:46【问题描述】:我对mod_rewrite有点进退两难。如何编写将决定以下内容的规则:如果我浏览/en/page/page我想将其重写为:index.ph... 查看详情

nginx 将除白名单外的所有内容都重写为 index.php

...gniter,我正在尝试从Apache迁移到nginx。然而,在Apache中,.htaccess非常简单 查看详情

重写 .htaccess 到子目录

】重写.htaccess到子目录【英文标题】:Rewrite.htaccesstosubdirectory【发布时间】:2012-05-0606:37:29【问题描述】:如何重写URL,所以当我输入时http://mydomain.com/index.php与相同http://mydomain.com/subdomain/index.php【问题讨论】:【参考方案1】:... 查看详情