MultiViews *太容忍错误的URL

时间:2017-01-04 01:51:25

标签: apache .htaccess apache2 multiview multiviews

当我启用MultiViews时,如果我访问了错误的URL,我的页面(index.php)仍然会被访问,当我希望用户得到404错误时。我试图找出如何解决这个问题而不在我的.htaccess中创建规则。

例如," www.mydomain.com/ 索引 / blah / blah",访问 index.php ,但我希望它失败由于无关的垃圾URL组件。类似地," / 联系 / blah / awuihda / hiu",显示 contact.php 的内容,应该给出404错误,因为&# 34; /嗒嗒/ awuihda / HIU"不存在。

如果我禁用MultiViews它可以正常工作,但是我无法按照我的意愿缩写URL(例如,无法输入" / contact"提起" contact.php&#34)。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容,因此不需要.php扩展名,这是常用方法:

RewriteEngine on
# Remove .php if it's present with a 301 redirect
RewriteRule ^(.+)\.php$ $1 [R=301,L]
# If a request doesn't exist as a directory, file or symlink
# and it does exist with .php appended, rewrite to that
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L]

我知道它会向.htaccess添加一条规则,但它适用于所有内容,也意味着您不会遇到可能存在相同内容的重复内容在有或没有.php的情况下提供服务(或者实际上在您的示例中跟踪之后的所有内容)。希望它有用。

它可能会进入主服务器配置但需要更改。

答案 1 :(得分:0)

我找到了一个适合我的解决方案。

Options -Indexes SymLinksIfOwnerMatch -MultiViews

RewriteEngine On

RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

来源:link