Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_重写与简单重定向不匹配_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache mod_重写与简单重定向不匹配

Apache mod_重写与简单重定向不匹配,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我对mod\u rewrite有一个奇怪的问题。我的网站的设置方式是,用户可以通过URL(如example.com/pt/about)访问网页的翻译版本,或者只访问普通页面(如soexample.com/about),为此,我在中提供了以下内容 RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(en|pt)/?$ index.php?lang=

我对
mod\u rewrite
有一个奇怪的问题。我的网站的设置方式是,用户可以通过URL(如
example.com/pt/about
)访问网页的翻译版本,或者只访问普通页面(如so
example.com/about
),为此,我在
中提供了以下内容

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^(en|pt)/?$ index.php?lang=$1 [NC,QSA,L]

RewriteRule ^about/?$ about.php [NC,QSA,L]
RewriteRule ^contact/?$ contact.php [NC,QSA,L]
RewriteRule ^([A-Za-z]{2})/about/?$ about.php?lang=$1 [NC,QSA,L]
RewriteRule ^([A-Za-z]{2})/contact/?$ contact.php?lang=$1 [NC,QSA,L]
在我的开发机器上,我用Apache2.4.29运行XAMPP3.2.2,在我的生产服务器上,我用Apache2.4.18运行Ubuntu 16.04.3 LTS。在我的开发机器中,一切正常,如果我尝试访问
/about
它会显示
about.php
,如果我尝试
/pt/about
它会将页面翻译成葡萄牙语,这是正确的行为,但是在生产服务器中,如果我尝试访问
/about
我会得到一个404错误,但是如果我尝试访问
/pt/about
,它会正确显示页面,没有任何问题

为什么会发生这种情况以及我如何纠正它?

来自:

RewriteBase指令指定用于替换相对路径的每个目录(htaccess)RewriteRule指令的URL前缀

在每个目录(htaccess)上下文中的替换中使用相对路径时,除非满足以下任何条件,否则需要此指令:

  • 原始请求和替换位于DocumentRoot下面(而不是通过其他方式(如Alias)可以访问)
  • 包含重写规则的目录的文件系统路径(以相对替换作为后缀)在服务器上作为URL路径也是有效的(这种情况很少见)
  • 在Apache HTTP Server 2.4.16及更高版本中,当通过Alias或mod_userdir映射请求时,可以省略此指令
  • 我认为问题在于配置差异,可以通过在代码中添加
    RewriteBase/
    来解决,所以应该是这样的:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    
    RewriteRule ^(en|pt)/?$ index.php?lang=$1 [NC,QSA,L]
    
    RewriteRule ^about/?$ about.php [NC,QSA,L]
    RewriteRule ^contact/?$ contact.php [NC,QSA,L]
    RewriteRule ^([A-Za-z]{2})/about/?$ about.php?lang=$1 [NC,QSA,L]
    RewriteRule ^([A-Za-z]{2})/contact/?$ contact.php?lang=$1 [NC,QSA,L]
    

    只是尝试了这个,显然没有什么不同,这真的是一个奇怪的问题。好吧,尝试清除浏览器缓存并再次测试它,如果没有什么让我知道,我想在所有代码中做一些更改尝试了所有可能的方法,包括在不同的机器上尝试,似乎没有任何效果。