0

我在我的 .htaccess 文件中禁用了目录浏览,最近我更改了我的默认索引页面,它可以工作。但是现在当我浏览到:domain.com/images/时,它应该给我一个 403 禁止错误,但它只是转到索引页面' /en/index.php '本身。

#Turn rewrite engine on
RewriteEngine on

#Disable directory browsing
Options -Indexes

#Default index page
DirectoryIndex /en/index.php

ErrorDocument 404 /error.php

#Add trailing slash
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*) /$1/ [R=301,L]

#Remove trailing slash
RewriteCond %{REQUEST_URI} !^/en/$
RewriteCond %{REQUEST_URI} !^/fr/$
RewriteCond %{REQUEST_URI} !^/images/$
RewriteCond %{REQUEST_URI} !^/includes/$
RewriteCond %{REQUEST_URI} !^/stylesheets/$
RewriteRule ^/$ /$1 [R=301,L]

#Redirect non-www to www
RewriteCond %{HTTP_HOST}  \.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]

#Add trailing slash
RewriteCond %{REQUEST_URI} !\.[^./]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*) /$1/ [R=301,L]

#English
RewriteRule ^what-is-minecraft/$ /en/what-is-minecraft.php [NC,L]
RewriteRule ^getting-started/$ /en/getting-started.php [NC,L]
RewriteRule ^mods/$ /en/mods.php [NC,L]
RewriteRule ^best-mods/$ /en/best-mods.php [NC,L]
RewriteRule ^terms-of-service/$ terms-of-service.php [NC,L]
RewriteRule ^privacy-policy/$ privacy-policy.php [NC,L]

#French
RewriteRule ^fr/cest-quoi-minecraft/$ /fr/cest-quoi-minecraft.php [NC,L]
RewriteRule ^fr/demarrage/$ /fr/demarrage.php [NC,L]
RewriteRule ^fr/mods/$ /fr/mods.php [NC,L]
RewriteRule ^fr/meilleurs-mods/$ /fr/meilleurs-mods.php [NC,L]
RewriteRule ^fr/$ /fr/index.php [NC,L]

任何人都可以找出问题所在吗?

编辑:发布我完整的 .htaccess 代码。

4

1 回答 1

1

使用此代码,您无需删除尾部斜杠,因为它不会附加到 php 文件的重定向中,并且您无需担心现有文件或文件夹,因为它们也不会被重写。

Options +FollowSymLinks -MultiViews -Indexes

RewriteEngine On
RewriteBase /

ErrorDocument 404 /error.php

#Redirect non-www to www
RewriteCond %{HTTP_HOST} \.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Remove the php extension
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R=301,L]

# Does not end with trailing slash redirect
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^ %{REQUEST_URI}/ [R=301,L]

# To internally redirect /anything to /anything.php if /anything.php exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/en [NC]
RewriteCond %{DOCUMENT_ROOT}/en/$1\.php -f
RewriteRule ^(.+?)/?$ en/$1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
于 2013-09-22T11:57:29.553 回答