добавляется 301 перенаправление? страница =

#apache #.htaccess #redirect

#apache #.htaccess #перенаправление

Вопрос:

Я настроил несколько перенаправлений 301 в моем файле .htaccess… для файлов, которые не существуют. Они действительно перенаправляют, но с добавленным запросом. Например:

Используя одно из моих перенаправлений в моем файле htaccess ниже: если я введу example.com/about-example.php это должно перенаправить меня на example.com/about-example.html и это отчасти так, но это заставляет меня example.com/about-example.html?page=about-example.php с добавлением этого ?page=(перенаправление) и moz видит эту перенаправленную страницу с запросом в конце как дубликатисходная страница.

Вот как выглядит мой htaccess… (многое меняется на example/xyz)

 Options -Indexes  FollowSymLinks

RewriteEngine on
RewriteBase /

# Remove "www."
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

# Redirect any requests for html files to index
RewriteRule ^(. ).html index.php?page=$1 [L]

# Rewrite any request for subdirectories to index
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(. )$ index.php?page=$1 [L,QSA]

## SITE REFERRER BANNING
RewriteCond %{HTTP_REFERER} ^http://([^.] .)*example.net/ [NC,OR]




## EXPIRES CACHING ##

# 6 month for most static assets
<filesMatch ".(jpg|jpeg|png|gif|gs|ico)$">
Header set Cache-Control "max-age=1576800, public"
</filesMatch>

# 1 month for most static assets
<filesMatch ".(css|js)$">
Header set Cache-Control "max-age=2628000, public"
</filesMatch>

<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault                                      "access plus 1 month"

  # CSS
ExpiresByType text/css                              "access plus 1 year"

  # Data interchange
ExpiresByType application/json                      "access plus 0 seconds"
ExpiresByType application/xml                       "access plus 0 seconds"
ExpiresByType text/xml                              "access plus 0 seconds"

  # Favicon (cannot be renamed!)
ExpiresByType image/x-icon                          "access plus 1 week"

  # HTML components (HTCs)
ExpiresByType text/x-component                      "access plus 1 month"

  # HTML
ExpiresByType text/html                             "access plus 0 seconds"

  # JavaScript
ExpiresByType application/javascript                "access plus 1 year"

  # Manifest files
ExpiresByType application/x-web-app-manifest json   "access plus 0 seconds"
ExpiresByType text/cache-manifest                   "access plus 0 seconds"

  # Media
ExpiresByType audio/ogg                             "access plus 1 month"
ExpiresByType image/gif                             "access plus 1 month"
ExpiresByType image/jpeg                            "access plus 1 month"
ExpiresByType image/png                             "access plus 1 month"
ExpiresByType video/mp4                             "access plus 1 month"
ExpiresByType video/ogg                             "access plus 1 month"
ExpiresByType video/webm                            "access plus 1 month"

  # Web feeds
ExpiresByType application/atom xml                  "access plus 1 hour"
ExpiresByType application/rss xml                   "access plus 1 hour"

  # Web fonts
ExpiresByType application/font-woff2                "access plus 1 month"
ExpiresByType application/font-woff                 "access plus 1 month"
ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
ExpiresByType application/x-font-ttf                "access plus 1 month"
ExpiresByType font/opentype                         "access plus 1 month"
ExpiresByType image/svg xml                         "access plus 1 month"
</IfModule>


Redirect 301 /about-example.php http://example.com/about-example.html
Redirect 301 /vacation-faq.php http://example.com/faqs.html
Redirect 301 /3d-tour.html http://example.com/plans.html
Redirect 301 /images/cool/04.jpg http://example.com/gallery.html
  

Я пропустил команду или перенаправления не в том месте? Я пробовал переписывать правила, перенаправлять… и куча других вещей либо с тем же результатом, либо с 500 внутренними ошибками.. (редактировать) Я также безрезультатно возился с размещением перенаправлений..

Комментарии:

1. Я не совсем понимаю ваш вопрос, но у вас есть конкретная перезапись для этого RewriteRule ^(. ).html index.php?page=$1 [L]

2. Я отредактирую свой основной комментарий, чтобы объяснить подробнее.

Ответ №1:

Вам нужно обновить свое правило и добавить a ? в конце. Попробуйте вместо этого эти правила.

 Options -MultiViews
RewriteEngine on
#if request is a real file or dir do nothing
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

#else do these redirects
RewriteRule ^about-example.php http://example.com/about-example.html? [R=301,L]
RewriteRule ^vacation-faq.php http://example.com/faqs.html? [R=301,L]
RewriteRule ^3d-tour.html http://example.com/plans.html? [R=301,L]
RewriteRule ^images/cool/04.jpg http://example.com/gallery.html? [R=301,L]
  

Дайте мне знать, как этот ответ работает для вас.

Комментарии:

1. Привет, спасибо за помощь. Итак, я протестировал его с помощью one, и он перенаправляет на страницу, но теперь у него есть? в конце URL-адреса. Это должно произойти? Кроме того, что делает ? на самом деле?

2. @dhath здесь попробуйте вместо этого использовать Rewrite. Я изменил 4 правила. ? Сообщает ему удалить любую строку запроса и не добавлять ее, если она есть в запросе.

3. Я использовал rewrite, и он просто перешел на страницу 404. Работает RedirectMatch 301, просто интересно, «?» в конце страницы считается другой страницей, что приводит к дублированию содержимого? RewriteRule ^contact.php http://example.com/contact-example.html? [R=301,L] это то, что я поставил.

4. Я имел в виду? в конце URL-адреса не страница.

5. перенаправляются ли страницы на реальные страницы?