- 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/
是否可以在 .htaccess 中包含来自另一个 htaccess 文件的规则? .htaccess RewriteEngine On RewriteCond ... RewriteRule ...
我正在尝试做的事情: 在我的特定项目的服务器上,我想通过 htaccess 编写 URL 重写规则(从 URL 中删除 .php 或 .html 扩展名)。 我的网站网址: http://enacte
在我的 .htaccess 文件中我已经有一些重写条件和规则,并且它工作正常。 现在我需要将“http 到 https 重定向”添加到我的 htaccess 文件中。 这是我的旧 .htaccess
注意:我写了解决方案。不管怎样,谢谢你。 :) 我知道这似乎是重复的问题:我搜索了很多,我应用了数十条重写规则,但它们不起作用。 我需要从 重定向 www.domain.com/folder1 到 w
我有一个带有 drupal 的多站点,我创建了一个站点,该站点起初应该可以通过多种方式(子域和路径)访问,但现在我只想保留其中一个;所以我应该重定向所有其他人。现在我有: aaa.domain.com
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我将我的网站从/v1/etc... 目录移动到/v2/etc... 目录,并希望在 htaccess 中进行永久重定向。有人能帮我吗? 最佳答案 您可以使用 mod_rewrite : Rewrite
我想通过 .htaccess 保护文件夹。以下不起作用。它在浏览器中显示登录对话框,但看起来好像用户名和密码不匹配。当我将方法更改为 Basic 时,它运行良好。 AuthUserFile /home
任何人都可以解释以下行吗? RewriteRule ^(.*)$ /index.php/$1 [L] 最佳答案 重写规则的部分分解如下: 重写规则 表示此行将是重写规则,而不是重写条件或其他重写引擎指
我正在尝试从一个域中一个目录中的所有文件创建一个永久的 htaccess 重定向(301)到另一个域,如下所示: 重定向以下目录中的所有文件: http://www.primary.com/apple
我不是 .htaccess 的英雄,但我遇到了一个我认为可能是由它引起的问题。 第一个症状:对我的数据库的简单更改(如用户 IP 跟踪)每次请求都完成了多次,而站点的输出看起来还不错。 经过数小时的跟
我想做一个类似basecamp.com的东西:你公司的名字变成三级域名,http://mycompany.basecamp.com例如。我知道它(很可能)是在.htaccess文件和mod_rewri
我已阅读 this这对我的要求来说似乎太长了。 并尝试过 Redirect /index.php /index2.php但它不起作用(内部服务器错误) 我想要的是将我的一些 php 文件重定向到 in
如果使用此代码,则成功: Redirect 301 /products.php http://website.com.au/product_123.php 但是,如果执行此操作,则不是: Redire
我想重定向这个子域: http://abc.domain-name.com 到根域上使用相同名称的文件夹: http://www.domain-name.com/abc 这样,如果我尝试访问以下文件:
我已经在我的实时站点上设置了 htpasswd 身份验证,并且效果很好,但是当我在开发环境中工作时,我不想被要求输入密码。 在我的 httpd.conf 文件中,我有: SetEnv APP_ENV
之前 我安装了 SSL,一切运行良好!!这是我的根网络服务器 .htaccess 文件中的代码: Options +MultiViews RewriteEngine On RewriteCond %{
我要问一个非常简单的问题。当我运行我的页面时,我不希望我的链接显示这个: http://localhost/example/assets/gallery.php 我想要的是: http://local
我在 htaccess 中有说明,可以让所有请求都通过 index.php 文件。但它禁止访问文件夹和文件。因此,如果我尝试转到/uploads/products/thumbs/file.png 它会
我有一个这样的网址:https://example.com/coins/1&order_by=today以及几个类别,例如: https://example.com/coins/1&order_by=
我是一名优秀的程序员,十分优秀!