【问题标题】:htaccess for multiple pages doesn't works多个页面的 htaccess 不起作用
【发布时间】:2020-06-05 22:36:12
【问题描述】:

首先解释我要做什么: 我的网站上有不同的页面。有些页面具有相同的模板,因此我创建了一个带有参数的页面以适应我的页面: 参数称为 pageview 和 lang URL 如下所示:

http://mywebsite/home/en http://mywebsite/index.php?pageview=home&lang=en

http://mywebsite/page2/fr http://mywebsite/index.php?pageview=page2&lang=fr

例如。为了实现这一点,我使用了著名的 .htaccess 文件,它是 Apache 的模块 rewrite_module。

我还有一个带有不同模板的联系页面。它的 URL 看起来像这样,这里只有一个参数:

http://mywebsite/contact/fr http://mywebsite/contact.php?lang=fr

http://mywebsite/contact/en http://mywebsite/contact.php?lang=en

这是我的 .htaccess 代码:

RewriteEngine On

RewriteRule ^contact/([a-zA-Z0-9]+)/?$ contact.php?lang=$1

RewriteRule ^([a-zA-Z0-9]+)$ index.php?pageview=$1 [QSA]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?pageview=$1&lang=$2 [QSA]

问题是 .htaccess 文件适用于 index.php 但不适用于 contact.php

我可以完全访问contact.php但是没有检测到参数

谢谢你的帮助????????? !

编辑

如果我删除索引部分以仅保留联系人 rewriteRule 的问题,则问题留在那里。

contact.phpindex.php 位于根文件夹中

【问题讨论】:

  • 你试过加[QSA]吗?
  • 是的,但没有任何改变;(
  • 尝试[L] 停止规则处理。您可能还希望使其不区分大小写并确保您在文档根目录下使用 contact.php,例如:RewriteRule ^contact/([a-zA-Z0-9]+)/?$ /contact.php?lang=$1 [NC,L]
  • 还是有问题,不过还是谢谢
  • 我的 PHP 代码似乎可以正常工作,因为当我输入 (mywebsite/contact.php?lang=fr) 时它可以正常工作

标签: regex .htaccess web mod-rewrite


【解决方案1】:
RewriteRule ^contact/([a-zA-Z0-9]+)/?$ contact.php?lang=$1

看起来您可能与 MultiViews 有冲突。如果启用了 MultiViews,那么 mod_negotiation 会将 /contact/fr 的请求重写为 /contact.php(不带任何参数) mod_rewrite 能够处理请求之前。

尝试在您的 .htaccess 文件顶部禁用多视图:

Options -MultiViews

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 1970-01-01
    • 2018-07-22
    • 2011-06-27
    • 1970-01-01
    • 2013-12-02
    • 2014-11-10
    • 2017-07-08
    • 1970-01-01
    相关资源
    最近更新 更多