服务器更改后,.htacess中出现奇怪的问题

时间:2019-02-11 15:47:56

标签: php .htaccess

我在根目录中有一个包含3个脚本的站点,分别为viewgames.phpplay.phpusers.php。我在同一(根)目录中也有一个.htaccess文件。

我的清理URL的.htaccess代码是:-

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

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

RewriteRule ^search/(.*)$ ./viewgames.php?search=$1
RewriteRule ^category/(.*)$ ./viewgames.php?cat=$1
RewriteRule ^users/(.*)$ ./users.php?action=$1
RewriteRule ^play/(.*)$ ./play.php?gn=$1
RewriteRule ^([a-z]+)\/?$ $1.php [NC]

ErrorDocument 404 /pagenotfound.php

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

当我在localhost(XAMPP)中进行开发时,使用localhost/MySite/play/foolocalhost/MySite/category/actionlocalhost/MySite/search/lolol或{ {1}}。

这显然意味着上面的.htaccess代码在我的本地主机服务器中像一个超级按钮一样工作。然后,我将上面的代码上传到基于Apache的共享Linux服务器上,并遇到了一些奇怪问题-

  • localhost/MySite/users/myaccount工作正常,https://example.com/category/blabla
  • 但是URL https://example.com/search/blablahttps://example.com/play/xyz停止工作。我的意思是,页面加载正常,站点在那里,但是没有https://example.com/users/anyaction值传递给PHP脚本。因此,我无法获得参数$_GETgn的值。 (请参见上面的代码
  • 我什至尝试通过在脚本中action设置var_dump数组,它们返回一个空数组,这意味着没有值发送到脚本。

请检查我的.htaccess代码。我对.htaccess完全陌生,上面的代码只是复制的代码。我将非常感谢您对此事的帮助。

1 个答案:

答案 0 :(得分:3)

像这样:

ErrorDocument 404 /pagenotfound.php

Options -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteRule ^search/(.*)$ viewgames.php?search=$1 [L,QSA,NC]
RewriteRule ^category/(.*)$ viewgames.php?cat=$1 [L,QSA,NC]
RewriteRule ^users/(.*)$ users.php?action=$1 [L,QSA,NC]
RewriteRule ^play/(.*)$ play.php?gn=$1 [L,QSA,NC]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([a-z]+)/?$ $1.php [L,NC]

请务必关闭MultiViews选项,以避免内容协商功能导致mod_rewrite模块出现问题。