Политика htaccess no-trailing-slash: несуществующие URL (404) не должны перенаправлять
Если я открою несуществующий URL на моем сайте, например www.domain.de/abcde/ (с косой чертой), URL перенаправится на www.domain.de/abcde (без косой черты) и откроет сайт 404 после.
Но сайт 404 должен появиться непосредственно, когда URL не существует (без перенаправления для политики без косой черты).
Что мне нужно добавить в мой htaccess? Спасибо!
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
------
Предложение Starkeens работает только на чистый htaccess, но я получил еще немного кода. Это не работает вместе с другими линиями. Весь код:
RewriteEngine on
RewriteBase /
# redirect urls without www. to url with www.
RewriteCond %{HTTP_HOST} ^domain\.de$
RewriteRule ^(.*)$ http://www.domain.de/$1 [L,R=301]
# hide the suffix of urls
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.+)\.html\ HTTP/
RewriteRule (.*).html$ /$1 [R=301,L]
# start redirect everything to the subfolder
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.de [NC]
# except these folders:
RewriteCond %{REQUEST_URI} !^/downloads [NC]
RewriteCond %{REQUEST_URI} !^/cms [NC]
RewriteCond %{REQUEST_URI} !^/vorschau [NC]
RewriteCond %{REQUEST_URI} !^/domain/.*$
RewriteRule ^(.*)$ /subfolder/$1
# end redirect everything to the subfolder
# no-trailing-slash policy
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
Есть новые предложения?:)
2 ответа
Наконец я получил решение, которое, кажется, работает.. может быть, кто-то получил ту же проблему и нуждается в коде. Комментарии для оптимизации приветствуются!
# trailing Slashes
# to enforce a no-trailing-slash policy with subfolder
# is the request for a non-existent file?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# if so, skip the next RewriteRule
RewriteRule .? - [S=1]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]
Теперь только существующие файлы получают перенаправление моей политики no-trailing-slash. Несуществующие файлы не перенаправляются и появляются на странице 404 напрямую, как хотелось бы.
ПЫТАТЬСЯ:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ - [R=404,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]