.htaccess在一个案例中不起作用

时间:2017-06-20 09:31:26

标签: .htaccess mod-rewrite url-rewriting

我正在尝试在aruba.it hosting提供的.htaccess中使用mod_rewrite, 但我有一种奇怪的行为。 我的目标是删除.php扩展名,例如:

  

www.mydomain.com/section/page

应加载

  

www.mydomain.com/section/page.php

这是我的.htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(.*)php$ [NC]
RewriteRule ^(.+)/(.+)?$ $1/$2.php?one=$1&two=$2&three=%{REQUEST_URI} [NC,L]

现在我将描述这种奇怪的行为。 如果我在浏览器中输入一个指向的页面的URL(扩展名中的一部分),则会添加.php。

所以:

  

www.mydomain.com/section/sdflkjcb

sdflkjcb.php 存在,给我(正确)此输出

  

在此服务器上找不到请求的URL /section/sdflkjcb.php。

请注意, .php 会添加到搜索到的页面中。

===============================

相反:

  

www.mydomain.com/section/page

page.php 存在,给我(奇怪的)这个输出

  

在此服务器上找不到请求的网址/部分/页面。

请注意,此次 .php

===============================

显然:

  

www.mydomain.com/section/page.php

显示正确的页面。

===============================

一些注意事项:

添加或删除RewriteCond%{REQUEST_FILENAME}!-f / -d不会改变任何内容。

我不得不添加RewriteCond%{REQUEST_URI}!^(。*)php $,否则规则将以递归方式应用

我添加了?one = $ 1& two = $ 2& three =%{REQUEST_URI}只是为了检查值。添加或删除它不会改变任何内容。

谢谢。

按照@anubhava

的建议编辑于21.06.17

这是另一个例子。

.htaccess only rule:

RewriteRule ^(dev/|a*)(lineup)/matchReport2/([A-Z]+)/(.+)?$ $1$2/matchReport2015.php?ID_Match=$4&MatchType=$3 [NC]

网址测试:

  

www.mydomain.eu/dev/lineup/matchReport2/CHM/997

作品!

===============================

.htaccess only rule:

RewriteRule ^(dev/|a*)(lineup)/matchReport2015/([A-Z]+)/(.+)?$ $1$2/matchReport2015.php?ID_Match=$4&MatchType=$3 [NC]

网址测试:

  

www.mydomain.eu/dev/lineup/matchReport2015/CHM/997

不起作用......

请注意,工作示例与另一个示例之间的唯一区别是 matchReport2 vs matchReport2015 www.mydomain.eu/dev/lineup/matchReport2015.php 是文件系统上的现有文件,而 www.mydomain.eu/dev/lineup/matchReport2 不是。到目前为止,我所做的每个测试都与此规则一致:如果URL作为文件存在(忽略扩展名),则忽略规则。

这是我可以在.htaccess文件中更改的配置吗?我无法管理Apache配置。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用此规则:

<IfModule mod_speling.c>
   CheckSpelling off
   CheckCaseOnly off
</IfModule>

Options -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f
RewriteRule ^([\w-]+)/([\w-]+)/?$ $1/$2.php?one=$1&two=$2&three=%{REQUEST_URI} [QSA,L]