У меня есть такой сайт, как https://yoursitename.com. Я использую файл .htaccess для перенаправления. Код в файле .htaccess выглядит так:

RewriteRule ^websites/all /filter.php?module=1&filter=all [R=301,NC,P]

Но при перенаправлении я попадаю на другую страницу со следующим кодом htaccess:

RewriteRule ^([a-zA-Z0-9_-]+)$ show-detail.php?c=$1

Что я делаю не так?

Содержание файла .htaccess

RewriteEngine on
RewriteBase    /

RewriteRule ^websites/all /filter.php?module=1&filter=all [R=301,NC,P]
RewriteRule ^websites/established /filter.php?module=1&filter=established [R=301,NC,P]
RewriteRule ^websites/starter /filter.php?module=1&filter=starter [R=301,NC,P]
RewriteRule ^websites/active /filter.php?module=1&filter=active [R=301,NC,P]
RewriteRule ^websites/ending /filter.php?module=1&filter=ending [R=301,NC,P]
RewriteRule ^websites/justsold /filter.php?module=1&filter=justsold [R=301,NC,P]
RewriteRule ^websites/dealflow /filter.php?module=1&filter=dealflow [R=301,NC,P]

RewriteRule ^domains/all /filter.php?module=2&filter=all [R=301,NC,P]
RewriteRule ^domains/auction /filter.php?module=2&filter=auction [R=301,NC,P]
RewriteRule ^domains/active /filter.php?module=2&filter=active [R=301,NC,P]
RewriteRule ^domains/ending /filter.php?module=2&filter=ending [R=301,NC,P]
RewriteRule ^domains/justsold /filter.php?module=2&filter=justsold [R=301,NC,P]
RewriteRule ^domains/appraisal /filter.php?module=2&filter=appraisal [R=301,NC,P]
RewriteRule ^domains/brokered /filter.php?module=2&filter=brokered [R=301,NC,P]

RewriteRule ^apps/all /filter.php?module=3&filter=all [R=301,NC,P]
RewriteRule ^apps/ios /filter.php?module=3&filter=ios [R=301,NC,P]
RewriteRule ^apps/android /filter.php?module=3&filter=android [R=301,NC,P]
RewriteRule ^apps/active /filter.php?module=3&filter=active [R=301,NC,P]
RewriteRule ^apps/ending /filter.php?module=3&filter=ending [R=301,NC,P]
RewriteRule ^apps/justsold /filter.php?module=3&filter=justsold [R=301,NC,P]

RewriteRule ^(websites|domains|apps|digitalGoods|sell)($|/) - [L]

RewriteRule ^item/(.*)$ ./show-digital.php?url=$1

RewriteRule ^([a-zA-Z0-9_-]+)$ show-detail.php?c=$1


RewriteCond %{HTTP_HOST} ^hiwebby\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.hiwebby\.com$

RewriteRule ^blog\/index\.php$ "http\:\/\/hiwebby\.com\/blog\/index\.php\/Support\/" [R=301,L]
0
Ankit 5 Июл 2017 в 15:51
Оба правила находятся в одном файле .htaccess? В каком порядке? Можете ли вы показать более важные части файла .htaccess? И какой URL вы пытаетесь посетить?
 – 
GolezTrol
5 Июл 2017 в 15:57
Есть ли другой код в файле .htaccess
 – 
lkdhruw
5 Июл 2017 в 15:59
, да, оба правила находятся в одном файле htaccess.
 – 
Ankit
5 Июл 2017 в 16:14
В файле @lkdhruw, ys, .htaccess больше правил. RewriteRule ^ веб-сайты / все /(.*)$ /filter.php?module=1&filter=all [R = 301, NC, P, L] RewriteRule ^ веб-сайты / установлено /(.*)$ /filter.php?module= 1 & фильтр = установлен [R = 301, NC, P, L] RewriteRule ^ веб-сайты / starter /filter.php?module=1&filter=starter [R = 301, NC, P, L] RewriteRule ^ веб-сайты / active /filter.php? module = 1 & filter = active [R = 301, NC, P, L] RewriteRule ^ веб-сайты / окончание /filter.php?module=1&filter=ending [R = 301, NC, P, L] RewriteRule ^ ([a-zA- Z0-9 _-] +) $ show-detail.php? C = $ 1 то же самое для модуля 2 и модуля 3
 – 
Ankit
5 Июл 2017 в 16:16
Было бы лучше, если бы вы добавили эти строки в свой вопрос.
 – 
lkdhruw
5 Июл 2017 в 16:19

2 ответа

Вы должны добавить флаг [L] (последний) - чтобы никакие другие правила не проверялись.

RewriteRule ^websites/all /filter.php?module=1&filter=all [R=301,NC,P,L]
0
Philipp Wrann 5 Июл 2017 в 16:07
Извините, сэр, не удалось .... настоящий URL-адрес yoursitename.com/filter.php?module=1&filter=all должен отображаться как yoursitename.com/websites/all, где module = 1 (веб-сайт) и filter = all
 – 
Ankit
5 Июл 2017 в 16:13
1) Убедитесь, что вы не связались с RewriteBase в своем htaccess 2) При тестировании перенаправления 301 используйте инструмент командной строки, а не браузер, браузеры часто очень агрессивно кешируют перенаправления 301 (они являются постоянными) - я бы посоветовал протестировать через curl или httpie
 – 
Philipp Wrann
5 Июл 2017 в 16:20

Ваши правила перезаписи во многих строках кажутся сомнительными. В моем ответе там Есть несколько вопросов и к вам. Настроить поведение сервера с помощью правил перезаписи сложно, любая неправильная конфигурация приведет к серьезной проблеме с веб-сайтами. Вот почему необходим полный поиск. Также вам следует рассмотреть возможность чтения документа https: // httpd. apache.org/docs/current/rewrite/flags.html#page-header

RewriteEngine on
RewriteBase /

Хорошо.


RewriteRule ^websites/all /filter.php?module=1&filter=all [R=301,NC,P]
RewriteRule ^websites/established /filter.php?module=1&filter=established [R=301,NC,P]
RewriteRule ^websites/starter /filter.php?module=1&filter=starter [R=301,NC,P]
RewriteRule ^websites/active /filter.php?module=1&filter=active [R=301,NC,P]
RewriteRule ^websites/ending /filter.php?module=1&filter=ending [R=301,NC,P]
RewriteRule ^websites/justsold /filter.php?module=1&filter=justsold [R=301,NC,P]
RewriteRule ^websites/dealflow /filter.php?module=1&filter=dealflow [R=301,NC,P]

Но в приведенном выше коде:
Вероятно, вы не используете прокси или перенаправление. Так что вместо этого вы можете использовать флаг [NC,L]. И вместо всех семи строк вы можете использовать только

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^websites/(.*)$ filter.php?module=1&filter=$1 [NC,L]

По аналогии

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^domains/(.*)$ filter.php?module=2&filter=$1 [NC,L]

А также

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^apps/(.*)$ filter.php?module=3&filter=$1 [NC,L]

Так далее (если есть).


RewriteRule ^(websites|domains|apps|digitalGoods|sell)($|/) - [L]

В вашей строке выше, как вы собираетесь обрабатывать такие запросы, как domain.com/websites. Есть ли каталог с именем websites ?.

Синтаксис «-» означает, что запрошенный URI не изменяется.


RewriteRule ^item/(.*)$ ./show-digital.php?url=$1

В приведенном выше коде . используется для каких-либо целей в ./show-digital.php?url=$1? а также отсутствует флаг. Вы можете изменить это как

RewriteRule ^item/(.*)$ show-digital.php?url=$1 [NC,L]

RewriteRule ^([a-zA-Z0-9_-]+)$ show-detail.php?c=$1 [NC,P]

Здесь также правильный флаг будет [NC,L]

RewriteRule ^([a-zA-Z0-9_-]+)$ show-detail.php?c=$1 [NC,L]

RewriteCond %{HTTP_HOST} ^hiwebby\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.hiwebby\.com$

RewriteRule ^blog\/index\.php$ "http\:\/\/hiwebby\.com\/blog\/index\.php\/Support\/" [R=301,L]

В этом разделе вы можете объяснить, что вы хотите сделать.

0
lkdhruw 8 Июл 2017 в 08:30
Большое спасибо. Как вы и просили, есть папки с именами веб-сайтов, доменов и приложений. Но файлы filter.php, show-detail.php и show-digital.php находятся в корне. Ваш предоставленный код работает хорошо. Но есть одна маленькая проблема. Перенаправление доменов и приложений работает нормально, но перенаправление веб-сайтов не приводит меня на нужную страницу. если я использую domain.com/website, то он работает, но не с domain.com/website
 – 
Ankit
7 Июл 2017 в 16:08
Если я хочу получить доступ к [ссылке] (domain.com/websites/index.php), я попадаю на страницу filter.php, но в адресной строке отображается URL-адрес domain.com/websites/
 – 
Ankit
8 Июл 2017 в 08:24
Таким образом, существует domain.com/websites/index.php, вы можете поместить условие перезаписи перед правилом перезаписи. Я обновил соответственно.
 – 
lkdhruw
8 Июл 2017 в 08:30
Спасибо за быстрый ответ. Теперь проблема решена на 100%. Спасибо еще раз. Можем ли мы связаться лично по почте?
 – 
Ankit
8 Июл 2017 в 12:47
Конечно, вы можете связаться со мной по lkdhruw@live.com
 – 
lkdhruw
8 Июл 2017 в 12:54