- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已在 example.com 中安装了 WordPress。我还在ci
文件夹中安装了CodeIgniter,这里example.com/ci/
,ci
是文件夹名称,register
是 Controller 名称,CI 的工作 URL 是 example.com/ci/register
。我的基本 URL 以 https://开头。
现在我有一个 WordPress 网址 example.com/hotel
,hotel
是我在 WordPress 管理中心创建的页面,它工作正常。
我想运行我的 CI 路径,如 example.com/hotel/ci/register
,我想我们可以使用一些重写规则来实现,这样我的 URL 就会像 example. com/hotel/ci/register
。我已经为 WordPress 添加了给定的 htaccess
,它将我重定向到这里 example.com/hotel/ci/register
。它向我展示了 CI 的 404 错误
。这意味着我现在在CI。现在我在 routes.php
文件中做了以下事情。
$route['default_controller'] = 'register';
$route['404_override'] = 'register';
现在这个 URL example.com/hotel/ci/register
可以工作,但这不是正确的方法,下次会有更多 Controller 时它就不起作用了。
注意:我无法创建hotel
文件夹,因为hotel是WordPress中的一个页面。如果我创建 hotel
文件夹,则 WordPress URL example.com/hotel/将不起作用。它将 WordPress 页面重定向到 hotel
文件夹。所以我必须在不创建 hotel
文件夹的情况下执行此操作。请注意 example.com=myurl.com 。
我需要找到另一个好的解决方案。任何建议或指导将不胜感激?
以下是我在 wordpress htaccess
中的重写规则:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/?hotel/ci/register(/.*)?$ /ci/$1 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
以下是我的 CI htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
</IfModule>
最佳答案
有趣的问题!我设置了一个 Docker 容器,全新安装了 Wordpress 和 Codeigniter,我创建了一个 hotel
WP 中的页面,以及 Register
CI 中的 Controller 和 View ,并进行了测试。我在这个问题上花了太长时间,但我确实找到了答案。
首先,你的 WordPress .htaccess
。正如 @tobiv 在评论中指出的那样,您不应在 BEGIN/END WordPress
之间添加任何内容。评论,因为它可能会受到 WP 更新的影响。不过,您的重定向必须位于标准 WP 规则之前,因此请将其添加到文件的顶部:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^hotel/ci/register /ci/register [L]
</IfModule>
# BEGIN WordPress
# ... These are the default, unchnaged WP rules
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_rewrite.c>
和RewriteEngine On
重复,这看起来很困惑,但您确实需要它们,因为您的新规则必须首先执行,因此它会在 WP 规则之前处理请求。
您不需要修改Codeigniter .htaccess
文件,默认文件即可。它应该位于 Codeigniter 安装的根目录中 ci/.htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
此时https://example.com/hotel/ci/register
将显示 Codeigniter 404 页面。如果您启用了日志记录(请参阅 config/config.php
),并且查看日志文件,您就会明白原因:
ERROR - 2017-11-14 17:57:20 --> 404 Page Not Found: Hotel/ci
这就是整个问题的根源。由于初始重定向是内部重定向(意味着浏览器中显示的 URL 不会更改),Codeigniter 接收到处理的 URI 仍然显示在浏览器地址栏中 - hotel/ci/register
。 Codeigniter 将尝试通过两种方式处理此类请求:
在 application/config/routes.php
中查找匹配的路线
或者查找名为 application/controllers/Hotel.php
的 Controller ,使用名为 ci
的方法;
在我们的例子中没有 Hotel
Controller ,并且没有路由来描述如何处理此类请求,所以繁荣,404。
一个简单的解决方案是创建一个路由来处理此请求:
$route['hotel/ci/register'] = 'register/index';
现在https://example.com/hotel/ci/register
有效!
注释:
将默认路由设置为 register
( $route['default_controller'] = 'register';
) 意味着 https://example.com/ci/
还将显示寄存器。我不确定你是否想要那个?如果该 URL 显示与 https://example.com/hotel/ci/register
相同,您可能会遇到重复内容 SEO 问题。 ,所以也许您想要其他东西,或者 404。
请确保删除 $route['404_override'] = 'register';
路线;
CI base_url
与此问题无关,但显然应该设置。根据您希望链接的方式,我认为要么 http://example.com/ci/
或http://example.com/hotel/ci/
是对的。
我不太清楚您的 CI .htaccess
中这种情况的目的是什么。用于:
RewriteCond $1 !^(index\.php|resources|robots\.txt)
现有的默认条件已经跳过磁盘上存在的文件和目录。这就是 !-f
和!-d
条件的意思是 - “如果请求的模式与磁盘上的文件或目录不匹配,则执行重定向”。
如果您有 robots.txt
磁盘上的文件(在您的 ci/
目录中),并且有人请求 https://example.com/ci/robots.txt
,!-f
条件将失败,并且重写被跳过 - 意味着请求在不重写的情况下被处理,并且 robots.txt
则返回成功。 index.php
相同。如果您有一个名为 ci/resources
的目录,有人请求 https://example.com/ci/resources
,!-d
条件将失败,跳过重定向,请求成功。
我不确定你的 resources
部分,但也许您可以完全消除该情况。
如果你不需要漂亮的 Codeigniter URL(我的意思是除 https://example.com/hotel/ci/register
之外,此更改不会影响它),并且事实证明你不需要上面的额外条件,你可以得到摆脱 CI .htaccess
完全是为了简化事情。为此,只需更改 WordPress RewriteRule
到不漂亮的版本:
RewriteRule ^hotel/ci/register /ci/index.php/register [L]
并删除您的 CI .htacces
。
关于htaccess 中的 WordPress 和 CI 重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787656/
我们都知道ci" ci' ci( ci[ ... 做。在日常编辑中非常方便。我发现了一些奇怪的东西,并查看了帮助,没有找出原因。 说,我有一个文件: foo "target" foo 'target'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我的本地 gitlab 安装中有许多存储库。我正在从 Jenkins 迁移到 gitlab 以进行 CI,并且毫无问题地切换了我的第一个 repo。当我添加 .gitlab-ci.yml 时,第二个
我在一个github项目中有几个文件夹,每个文件夹都有一个不同的.travis.yml文件。 设置travis-ci的正确方法是什么,以便我可以指定要构建的文件夹/子项目? 我可以添加before_s
Gitlab 文档说明了以下关于 GIT_STRATEGY: none 的内容: none also re-uses the project workspace, but skips all Git
我想用以下条件配置我的 CI: 当我创建合并请求时 而这个目标分支是 develop 我的工作运行。 我没有找到这个特定工作的文档。 谢谢 最佳答案 在 Gitlab CI 文档中几个小时后,我找到了
我有一个带有子目录 ( test ) 的 gem,其中包含用于测试项目的 Rails 3.1.1 应用程序。我正在尝试设置 Travis-CI 以进行持续集成,但是我不知道如何设置我的 .travis
如何指定:语言:.travis.yml 中的无? 我不指定语言,默认使用 Ruby。 我没有 ruby 。我正在使用 C、C++、Ocaml、Python 和 Felix。 构建脚本只是“制作”。 最
我正在使用 gitlab pages部署作业的输出。我有 3 个不同的工作产生 html输出。一项工作总是在运行。其他 2 个作业是可选的,因此它们是手动运行的。 如何将手 Action 业的输出部署
我在 gitlab.com 上有一个使用 CI 功能的私有(private)存储库。一些 CI 作业会创建存储的工件文件。我刚刚通过将其添加到 CI 配置中实现了一天后自动删除工件: expire_i
假设我为一个项目配置了多个作业,如下所示: build_win32: script: ... build_ios: script: ... unit_tests: script: ...
如何创建跨越多个阶段的 CI 作业以提高并行性? 如下图所示: 这个想法是slow_build应该最早开始build ,但是 test不依赖它,所以 test应该可以尽快启动build已经完成了。 (
我有一个 CI 管道,它可能正在做一些半变态的事情。我们不要争论这部分。 作为 CI 的一部分,我将生成一个工件 ( README.md ),我希望将其提交并推回同一存储库。只需使用 git push
我的项目同时使用nodejs和java 我尝试从 node_js 构建开始,然后安装 java(因为这是一个 npm 模块) 但是安装java的脚本失败了,而且我认为当已经存在java构建时就没有必要
我不想为了运行构建而将每一个小的更改都推送到 .travis.yml 以及对源代码所做的每一个小的更改。使用jenkins,您可以下载jenkins并在本地运行。特拉维斯提供这样的东西吗? Note:
主题。 这是否意味着在免费帐户中我的 api 请求数量有限? 响应部分示例: { "@type": "pending", "remaining_requests": 9, "reposit
有什么办法可以按顺序从舞台运行作业吗?我尝试过使用依赖项来做到这一点 job1: stage:deploy ... job2: stage:deploy dependencies:
我正在努力为多个项目设置 gitlab 运行程序,我们希望能够为所有项目设置环境变量。我尝试在 .bashrc 中为 gitlab-runner 和 root 用户设置全局变量,但在 CI 脚本过程中
Travis 有一种针对不同 PHP 版本测试项目的简单方法。 现在我想为插件运行测试。为此,我编写了一个在 .travis.yml 的安装阶段调用的脚本,它检查主项目并将我的插件源移动到正确的目录中
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。
我是一名优秀的程序员,十分优秀!