Apache 2.4 URL 重写:/server/?Server=ServerName 到 /server/ServerName [关闭]

2024-05-21

我试图简单地将 URL 重写为/server/ServerName from /server/?Server=ServerName所以这样ServerName参数传递给 PHP。

我目前有这个.htaccess file:

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} Server=([^&]+)
RewriteRule "^server/$" "/server/%1/?"

当尝试同时查看两者时/server/ServerName or /server/?Server=ServerName我收到 404 错误。

这是我的重写日志:

init rewrite engine with requested uri /server/
pass through /server/
strip per-dir prefix: C:/wamp64/www/server/ -> server/
applying pattern '^server/$' to uri 'server/'
RewriteCond: input='Server=ServerName' pattern='Server=([^&]+)' => matched
rewrite 'server/' -> '/server/ServerName/?'
split uri=/server/ServerName/? -> uri=/server/ServerName/, args=<none>
trying to replace prefix C:/wamp64/www/ with /
trying to replace context docroot C:/wamp64/www with context prefix 
internal redirect with /server/ServerName/ [INTERNAL REDIRECT]

在这一点上,我需要一点指导,因为我很沮丧,而且我觉得我错过了一件简单的事情。

我尝试过调整:

  • mod_rewrite 查询字符串返回 404 https://stackoverflow.com/questions/41456927/mod-rewrite-query-strings-returning-404
  • .htaccess 中 $1 与 %1 之间的差异 https://stackoverflow.com/questions/6654834/difference-between-1-vs-1-in-htaccess
  • 为什么使用 .htaccess RewriteRule 会出现 404 not found 错误? https://stackoverflow.com/questions/70623564/why-i-get-404-not-found-with-the-htaccess-rewriterule
  • 使用来自的示例https://httpd.apache.org/docs/2.4/rewrite/remapping.html https://httpd.apache.org/docs/2.4/rewrite/remapping.html
  • 引用标志来自https://cheatography.com/davechild/cheat-sheets/mod-rewrite/ https://cheatography.com/davechild/cheat-sheets/mod-rewrite/

我也一直在研究重写代码,试图看看它是否真的在重写。

使用下面的代码成功重写了目录/test2/ to /server/?Server=ServerName并且页面加载良好,因此我知道该模块处于活动状态并且正在运行。

RewriteRule ^test2/$ /server/?Server=ServerName [PT,L,R=301]

尝试这种改变没有运气。 URL 不会重写,但页面会加载。Apache 2.4 .htaccess 友好的 URL 重写 https://stackoverflow.com/questions/43241189/apache-2-4-htaccess-friendly-url-rewrite

RewriteRule ^server/([^/\.]+)/?$ /server/?Server=$1? [L]

将 URL 重写为/server/ServerName from /server/?Server=ServerName:

RewriteCond %{QUERY_STRING} Server=([^&]+)
RewriteRule "^server/$" "/server/%1/?"

你似乎把这件事搞错了。你应该链接到/server/ServerName在您的 HTML 源中,因此在内部重写请求from /server/ServerName to /server/index.php?Server=ServerName(注意添加index.php,如评论中所澄清)。/server/index.php?Server=ServerName是实际处理请求的底层(隐藏)文件路径。

尽管你似乎在最后一行中就已经提到了......

URL 不会重写,但页面会加载。

RewriteRule ^server/([^/\.]+)/?$ /server/?Server=$1? [L]

URL 必须被重写,否则页面将无法加载。对于“重写”到底是什么可能存在一些困惑。这不会更改 URL。你不使用.htaccess to change网址。您必须在 HTML 源中手动更改 URL - 您要链接到的 URL。

如果您愿意,您可以(可选)稍后实现外部“重定向” - 这确实会更改 URL。但这是only重定向可能链接到旧 URL 或对其建立索引的搜索引擎和第三方。所以,这是为了搜索引擎优化,而不是为了让你的应用程序“工作”。

因此,总而言之,按以下顺序:

  1. 更改 HTML 源中的 URL,以便链接到表单的 URL/server/ServerName.
  2. (可选)如果您要更改现有 URL 结构,请将任何直接请求重定向到/server/?Server=ServerName (or /server/index.php?Server=ServerName) to /server/ServerName(规范 URL)。
  3. 内部重写请求/server/ServerName(规范 URL / 您链接到的 URL)到/server/index.php?Server=ServerName(处理请求的底层文件)。

在根部.htaccess file:

RewriteEngine On

# (OPTIONAL) For SEO, if changing an existing URL structure...
# Redirect "/server/?Server=ServerName" to "/server/ServerName"
RewriteCond %{QUERY_STRING} ^Server=([^&./]+)(&|$) [NC]
RewriteRule ^server/(index\.php)?$ /server/%1 [NE,R=301,L]

# Rewrite request from "/server/ServerName" to "/server/index.php?Server=ServerName"
RewriteRule ^server/([^/.]+)$ server/index.php?Server=$1 [END]

假设您使用的是 Apache 2.4,以便能够使用END最后一条规则中的标志。这避免了必须有一个额外的状况在检查直接请求而不是“重写”请求的第一条规则中(以避免重定向循环)。

在第一条规则(“重定向”)中index.php部分是可选的。这%1反向引用包含的值Server前面捕获的URL参数状况. The ServerURL 参数必须非空且不包含点或斜杠(根据您在上一条规则中给出的正则表达式),否则不会重定向或重写。请注意,正则表达式字符类中的文字点不需要反斜杠转义。

请注意,我假设(根据您的示例)所请求的 URL 确实not以尾部斜杠结尾(即/server/ServerName并不是/server/ServerName/),所以我删除了可选的/?在结束时RewriteRule pattern在最后一条规则中。尽管您的日志摘录似乎另有暗示?如果您确实需要允许尾随斜杠和非尾随斜杠 URL,那么这应该作为单独的“重定向”实现,以便规范化 URL,而不是作为“重写”的一部分,否则会促进重复内容(斜杠和无斜杠 URL 是不同的 URL)。

取决于您期望的值ServerURL参数值,NE (noescape) 标志可能是也可能不是必要的。这QUERY_STRING服务器变量已经是 URL 编码的。

您不需要使用PT (passthrough) 中的标志.htaccess,因为这是此上下文中的默认行为。 (这PT标志仅在使用 mod_rewrite 时相关server or 虚拟主机语境。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache 2.4 URL 重写:/server/?Server=ServerName 到 /server/ServerName [关闭] 的相关文章

  • php:SEO 友好的 url

    我正在开发一个新项目 我想为这个网站创建 SEO 友好的 URL 例如 mysite com first content mysite com second content URL 必须是动态的 这意味着 URL 必须与内容标题相关 我怎样
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • Apache 2 gzip json 默认输出吗?

    我正在使用此 PHP 代码进行 json 输出 apache默认gzip吗 或者 我该如何检查才能确定 header Content type application json header Cache Control max age 0
  • Apache mod_wsgi django启用多线程多进程

    问题 我如何知道我的 apache 服务器是否已经在多进程和多线程模式下运行 因为当我对其进行负载测试时 它在不同的线程数下给出了相同的结果时间 我用 25 个线程和 50 个线程运行测试 我需要在 Django 代码中为多线程 多进程工作
  • 想要重定向除我之外的所有访问者

    基本上我即将开始在一个网站上工作 我想要一些可以添加到我的 htaccess 文件 或其他地方 中的内容 其工作方式如下伪代码 我的 ip 将代替 127 0 0 1 if visitors ip lt gt 127 0 0 1 redir
  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • 使用 asp.net 重写 URL。是否需要配置?

    我正在尝试在我的项目中启用重写的网址 这篇文章描述得很好 scottgu 的 url 重写 http weblogs asp net scottgu archive 2007 02 26 tip trick url rewriting wi
  • AH00124:由于可能的原因,请求超出了 10 个内部重定向的限制

    升级我的 Ubuntu 服务器后 我尝试打开我的 WordPress 网站 我在 error log 中收到此错误 AH00124 由于可能的配置错误 请求超出了 10 个内部重定向的限制 如有必要 请使用 LimitInternalRec
  • htaccess 中的重写规则以匹配某些文件扩展名

    如何查找某些文件扩展名的实例 例如 jpg png css js php 如果没有匹配项 则将其发送到 index php route 1 我希望能够允许自定义用户名使用句点 所以 重写http example com my name ht
  • 在 CGI 模式下运行时如何覆盖 PHP 配置

    有一些教程告诉我如何在 CGI 模式下运行时覆盖 PHP 配置 但我仍然很困惑 因为很多人都认为服务器运行在 Linux 上 虽然我需要这样做also在 Windows 上 我的主机确实使用 Linux 但我的本地开发计算机使用 Windo
  • 在Java中解析包含multipart/form-data请求体的字符串

    问题陈述 我认为标题说明了一切 我正在寻找解析 a 的方法String包含 multipart form data HTTP 请求的正文部分 IE 字符串的内容看起来像这样 xyzseparator blah Content Disposi
  • Apache httpd 上的选择性代理端口转发

    我正在尝试将 WordPress 集成到在 Nodejs 服务器上运行的网站中 并启用 Apache Httpd 端口转发 以将所有请求从 80 端口转发到 Nodejs 端口 9000 我已将 WordPress 安装到 Apache h
  • 如何从Python请求库正确返回http响应(想要一个Python反向代理)

    这个问题继续自here https stackoverflow com questions 48635552 how to programmatically communicate with apache 我想创建一个反向代理 它允许我托管
  • Apache2 重写查询字符串转义两次

    在虚拟主机配置文件中使用此规则会导致查询参数的双重转义 RewriteEngine On RewriteCond HTTPS off RewriteRule https HTTP HOST REQUEST URI 例如 http examp
  • Django + WSGI:刷新问题?

    我正在开发一个 Django 网站 我在实时服务器上进行所有更改 只是因为这样更容易 问题是 它似乎时不时地喜欢缓存我正在处理的 py 文件之一 有时 如果我频繁点击刷新 它会在页面的旧版本和新版本之间来回切换 我的设置或多或少类似于 Dj
  • 将 .htaccess 中的非 www 重定向到 www

    我的 htaccess 文件中有这个 RewriteCond HTTP HOST example com RewriteRule http www example com 1 R 301 L 但每当我访问根目录上的文件时 就像http ex
  • Web.config 将所有路径重定向到index.php - 不起作用

    我主要使用 Apache 和 htaccess 但我目前正在开发一个托管在 Windows 服务器上的网站 Web config 给我带来了很多问题 我试图将所有 URL 请求重定向到 index php 以便 PHP 脚本可以解析 URL
  • 使用 VirtualDocumentRoot 的 SSL 虚拟主机

    我在 ubuntu 16 04 VM 上进行开发工作 当我处理多个项目时 为了让我的生活更轻松 我使用 VirtualDocumentRoot 和主机文件使用 dev 域从我的主文件夹中服务器站点 在 000 default conf 我有
  • 使用 Apache 在本地网络上托管网站

    我目前在我的机器上使用 Apache 在本地测试 PHP 网站 我只是想知道如何允许连接到本地网络的计算机访问本地计算机上托管的网站 如果仅通过 IP 本地网络上的计算机应该能够访问您的计算机 假设您没有防火墙阻止端口 80 HTTP 完成
  • 是否必须配置 PHP 才能通过 PHP 扫描每个目录的配置 INI 文件(即我的情况下的 .htaccess 文件)?

    我在用着Windows 10 家庭单语言 64 位操作系统在我的机器上 我已经安装了最新的副本XAMPP服务器在我的机器上附带PHP 7 2 7 我从 PHP 手册中阅读了以下页面 扫描目录 https secure php net man

随机推荐

  • 定义 types.Dict 和 dict 之间的区别?

    我正在练习使用 Python 3 5 中的类型提示 我的一位同事使用typing Dict import typing def change bandwidths new bandwidths typing Dict user id int
  • 在 Braintree 中使用 AngularJS 加密信用卡详细信息

    我正在使用 Braintree 作为支付网关 但遇到了一个问题 我正在发送信用卡信息和其他用户详细信息 出于安全目的 信用卡信息必须进行加密 Braintree 对此进行了加密 包括以下内容 braintree onSubmitEncryp
  • Spring data 和 mongoDB - 继承和@DBRef

    我有这两份文件 用户 Document collection User public class User fields 和联系方式 Document collection Contact public class Contact exte
  • Jackson,java.time,ISO 8601,无毫秒序列化

    我正在使用 Jackson 2 8 需要与不允许 ISO 8601 时间戳内的毫秒数的 API 进行通信 预期的格式是这样的 2016 12 24T00 00 00Z 我正在使用 Jackson 的 JavaTimeModuleWRITE
  • filter_input() 何时删除 POST 变量的斜杠?

    我创建了一个小型 PHP 脚本 它在 PHP 5 2 17 的服务器上运行magic quotes gpc指令已启用 我没有对 php ini 文件的写访问权限 并且我想从用户输入中删除所有斜杠 即使magic quotes gpc指令被关
  • 自定义箭头反应光滑

    我正在使用react slick 在我的项目中创建一个轮播 我已经阅读了文档并尝试了不同的方法 但找不到一种方法来完全按照我需要的方式自定义它 有谁知道是否有办法让 nextArrow 显示在图像前面 前面而不是显示在图像上这是正确的 请参
  • React - 检查元素在 DOM 中是否可见

    我正在构建一个表单 用户需要回答一系列问题 单选按钮 然后才能进入下一个屏幕 对于字段验证 我使用 yup npm 包 和 redux 作为状态管理 对于一种特定场景 组合 会显示一个新屏幕 div 要求用户进行确认 复选框 然后用户才能继
  • 单个数字到年份的高级转换,以及连字符

    我想将水晶报表中的字符串值转换为日期时间 日期格式是 05 10 7 AAAA mm dd year 2017 AAAA 05 23 3 00 mm dd year 2013 00 我想要的输出是 10 May 2017 23 May 20
  • Webpack 5“dependOn”和目标:“es5”似乎不兼容

    我在使用 dependOn 条目参数时无法让 Webpack 5 输出 es5 兼容代码 我使用 Babel 来转译我的代码 效果很好 但除非我将 webpack 目标设置为 es5 否则 webpack 本身会输出不兼容的代码 我正在使用
  • 处理 Rails 2.1.x 中的 RoutingError 的最佳方法?

    我正在使用Rails 2 1 中的routing rb 代码 并尝试让它达到这样的程度 我可以对找不到合适路径时抛出的RoutingError 异常执行一些有用的操作 这是一个有点棘手的问题 因为有一些 URL 类别纯粹是糟糕的 azenv
  • useLocation 挂钩 - 确定过去的位置

    根据 React Router 5 1文档 https v5 reactrouter com web api location应该可以看到 应用程序现在在哪里 你想让它去哪里 甚至它曾经在哪里 在我的应用程序中 我需要查看 它在哪里 我访问
  • rPlot 工具提示问题

    我有一个使用 rCharts 工具提示的简单示例 但似乎不起作用 set seed 1 test lt data frame x rnorm 100 y rnorm 100 rPlot y x data test type point to
  • Redux 状态在 mapStateToProps 中未定义

    我目前正在关注this http teropa info blog 2015 09 10 full stack redux tutorial html教程 我遇到了一些障碍mapStateToProps在下面的代码中 import Reac
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 在 ajax 完成之前阻止提交

    我正在使用 jQuery 并且我希望在所有 ajax 调用完成之前表单提交不会起作用 我想到的一种方法是存储一个布尔值 该值指示是否有 ajax 请求正在进行 在每一个结束时它都会被设置为 false 我不确定这是否是最好的方法 所以我将不
  • 在 ASP.NET 中实现“记住我”功能

    实施的最佳方式是什么 remember me ASP NET 网站上的功能 我应该使用自定义cookie还是有更简单的方法 您是否使用内置的AuthenicationASP NET 提供的服务 如果是这样 那就很容易了
  • Excel 的 VBA - 如何检查范围的交集不为空

    我有两个问题 1 如何检查交集或范围是否不为空 例如 如果我想检查它是否为空 我会写 if application intersect r1 r2 is nothing 但有什么东西是否定虚无的吗 例如 并非没有任何事情不起作用 2 如何比
  • 使用 Google 地图 API 进行地址验证

    我的任务是验证输入到我当前正在创建的系统中的地址 系统要求输入的地址根据有效的数据源进行验证 在英国 数据集来自皇家邮政 访问费用昂贵 所需的数据是整个欧洲的邮政编码信息 首先通过 API 访问到 Web 应用程序 有很多公司提供这项服务
  • 如何将 CodeBlocks 与最新版本的 VC++ 编译器一起使用?

    我需要将 C B 与最新版本的 MS VC 编译器 例如 VS2015 或 VS2017 中的编译器 以及最终的未来版本一起使用 但 C B 不提供此类选项 C B 允许用户从设置中的列表中选择的最新 VC 版本是 VC 2010 MSVC
  • Apache 2.4 URL 重写:/server/?Server=ServerName 到 /server/ServerName [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我试图简单地将 URL 重写为 server ServerName from server Server ServerName所以这样