- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的 .htaccess 文件中创建重写规则来执行以下操作:
当通过 domain.com/abc.php 访问时:删除文件扩展名,附加尾部斜杠并加载 abc.php 文件。重写后的 url 应该是这样的:domain.com/abc/
当通过 domain.com/abc/访问时:保持 url 不变并加载 abc.php
通过 domain.com/abc 访问时:附加尾部斜杠并加载 abc.php。重写后的 url 应该是这样的:domain.com/abc/
删除 www
当访问的 url 未解析为文件夹或文件时重定向到 404 页面 (404.php),例如当访问 domain.com/nothingthere.php 或 domain.com/nothingthere/或 domain.com/nothingthere 时
做一些从旧 url 到新 url 的永久性 301 重定向(例如 domain.com/abc.html 到 domain.com/abc/)
所有的 php 文件都位于文档根目录中,但是如果有一个解决方案可以使诸如 domain.com/abc/def/(将加载 domain.com/abc/def.php)之类的 url 也可以工作,那么它会也很棒,但不是必须的
这就是我目前所拥有的(从网络上的各种来源和样本中收集而来
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
# redirect from www to non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
# remove php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
# resolve urls to matching php files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)/$ $1.php [L]
有了这个,前四个要求似乎有效,无论我输入 domain.com/abc.php、domain.com/abc/还是 domain.com/abc,最终 url 总是以 domain.com/abc/结束并加载 domain.com/abc.php。
当我输入一个解析为不存在的文件的 url 时,我收到错误 310(重定向循环),而实际上应该加载 404 页面。此外,我还没有尝试过子文件夹是否有效,但正如我所说,这是低优先级的。我很确定我可以在上面对遗留 url 进行永久 301 重定向,也没有任何问题,只是想提一下。所以真正的问题是 404 页面无法正常工作。
最佳答案
我在让 ErrorDocument 可靠地处理重写错误方面遇到了问题,因此我倾向于在我的重写级联中正确处理无效页面。我试图用它来涵盖所有测试向量。没有发现任何差距。
一些一般要点:
%{REQUEST_FILENAME}
。这是因为如果 URI 映射到 DOCROOT/somePathThatExists/name/theRest
,则 %{REQUEST_FILENAME}
设置为 DOCROOT/somePathThatExists/name
而不是等同于规则匹配字符串的完整模式。.htaccess
文件上循环,直到发生不匹配停止。404.php
,我假设它会设置 404 状态并显示错误页面。所以这是 .htaccess
片段:
Options -Indexes -MultiViews
AcceptPathInfo Off
RewriteEngine On
RewriteBase /
## Looping stop. Not needed in Apache 2.3 as this introduces the [END] flag
RewriteCond %{ENV:REDIRECT_END} =1
RewriteRule ^ - [L,NS]
## 302 redirections ##
RewriteRule ^ - [E=DOCROOT:%{ENV:DOCUMENT_ROOT_REAL},E=URI:%{REQUEST_URI},E=REQFN:%{REQUEST_FILENAME},E=FILENAME:%{SCRIPT_FILENAME}]
# redirect from HTTP://www to non-www
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
# remove php file extension on GETs (no point in /[^?\s]+\.php as rule pattern requires this)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule (.*)\.php$ $1/ [L,R=301]
# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ $0/ [L,R=301]
# terminate if file exists. Note this match may be after internal redirect.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L,E=END:1]
# terminate if directory index.php exists. Note this match may be after internal redirect.
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{ENV:DOCROOT}/$1/index.php -f
RewriteRule ^(.*)(/?)$ $1/index.php [L,NS,E=END:1]
# resolve urls to matching php files
RewriteCond %{ENV:DOCROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L,NS,E=END:1]
# Anything else redirect to the 404 script. This one does have the leading /
RewriteRule ^ /404.php [L,NS,E=END:1]
享受 :-)
关于.htaccess - mod 重写以删除文件扩展名,添加尾部斜杠,删除 www 并在没有文件/目录可用时重定向到 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032179/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!