Правило перезаписи .htacces не работает

У меня очень простое правило перезаписи, однако он не работает.

у меня следующее:

#old see edits for newer versions
RewriteCond %{HTTP_REFERER}           ^localhost:8080(/|$)
RewriteRule ^/downloads/.*  /somePackage/index.php?id=5  [NC,C]
RewriteRule ^/downloads   /somePackage/index.php?id=2  [NC,L]

кажется, что он не проходит RewriteCond , почему это так?

когда я пробую это:

RewriteRule downloads/?    /somePackage/index.php?id=2 [NC,L]

похоже, работает для localhost: 8080 / downloads

, но когда я пытаюсь:

RewriteRule downloads/.*/?    /somePackage/index.php?id=5 [NC,L]

, это не работает, почему это не работает? что мне делать вместо этого?

edit:

i это текущий код, который работает только для localhost: 8080 / downloads и localhost: 8080 / downloads / , но не когда я добавляю что-то после косой черты

RewriteRule downloads/somedownload/?  /somePackage/index.php?id=5  [NC,L]
RewriteRule downloads/?   /somePackage/index.php?id=2  [NC,L]

edit 2:

для этого используется код .htaccess.

# Only the URLs /downloads and /downloads/ (with and without trailing slash)
RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L]

#gives 404 - Category not found
RewriteRule ^downloads/ignis_desktop$ /somePackage/index.php?id=5 [NC,L]

# Everything else that starts /downloads/<something>
RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]

я не могу найти решение для 404.

однако с [r = 301] кажется, что перенаправление на страницу выполняется правильно, но это нарушает цель перезаписи: сделать URL причудливым.

2
задан 31 October 2016 в 15:21
2 ответа

Я нашел решение моей проблемы,

Я изменил перезапись на это:

RewriteRule ^downloads/somedownload$ /somepackage/index.php?option=com_content&view=article&id=5

хотя в моем меню я могу ссылаться на такие страницы, как это:

localhost:8080/home

, и он будет переписан на:

RewriteRule ^home/?    /somepackage/index.php?id=1   [L,NC]
0
ответ дан 3 December 2019 в 14:20

HTTP_REFERER (если установлен) является абсолютным URL, начинающийся со схемы. например,

http://localhost:8080/....

Итак, CondPattern , например ^ localhost: 8080 (/ | $) , никогда не будет соответствовать.

Обратите внимание, что директивы RewriteCond применяется только к единственному RewriteRule , а не ко всем из них, как кажется в первом примере кода.

 RewriteRule ^ / downloads /somePackage/index.php?id=2 [NC,  L]
 

Шаблон RewriteRule , такой как ^ / downloads (т. Е. Путь URL, начинающийся с косой черты), никогда не будет совпадать в каталоге .htaccess файлов. В файлах .htaccess префикс каталога сначала удаляется из URL-пути перед сопоставлением с образцом. Таким образом, это должно быть ^ downloads , чтобы соответствовать всем URL, начинающимся с / downloads .

 RewriteRule downloads /.*/?  /somePackage/index.php?id=5 [NC, L]
 

Это не будет соответствовать localhost: 8080 / downloads , так как шаблон требует завершающей косой черты.

ОБНОВЛЕНИЕ:

Я хочу localhost: 8080 / downloads для перехода на id = 2 и localhost: 8080 / downloads / somedownload для перехода на id = 5 и localhost: 8080 / загрузок / anotherdownload , чтобы перейти к id = 6 , однако для вопроса, который я сжал до / downloads / , перейдите к id = 5

] Я предполагаю, что / downloads - это , а не физический каталог в файловой системе. В этом случае вам следует использовать конец строки привязки ( $ ) в шаблоне RewriteRule или быть осторожным с порядком, в котором вы размещаете эти директивы (т. Е. Большинство из них. сначала конкретные).

Попробуйте следующее:

# Only the URLs /downloads and /downloads/ (with and without trailing slash)
RewriteRule ^downloads/?$ /somePackage/index.php?id=2 [NC,L]

# Everything else that starts /downloads/<something>
RewriteRule ^downloads/. /somePackage/index.php?id=5 [NC,L]

Спорный вопрос, должны ли вы ловить и / downloads , и / downloads / - в идеале, это должно быть одно или другое .

Чтобы перехватить конкретный URL (например, / downloads / somedownload ), тогда это должно быть перед правилом «Все остальное ...»:

RewriteRule ^downloads/somedownload$ /somePackage/index.php?id=5 [NC,L]
0
ответ дан 3 December 2019 в 14:20

Теги

Похожие вопросы