У меня есть .htaccess rewrite rure, который также перезаписывает папки

Это мой код:

RewriteRule    ^([A-Za-z0-9-]+)/?$    index.php?category=$1    [NC,L]
RewriteRule    ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)    index.php?category=$1&subcategory=$2    [NC,L]

Теперь проблема в том, что он фактически рассматривает каталог и подкаталог как категорию и подкатегорию соответственно. Я пробовал много разных решений, чтобы оставить каталог нетронутым, но, похоже, ни одно из них не работает.

кто-то предлагает мне:

RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]

А ТАКЖЕ

RewriteCond %{REQUEST_URI} !^/css
RewriteCond %{REQUEST_URI} !^/js
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{REQUEST_URI} !^/digitalserp
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]

Ничего не работает до сих пор. Пожалуйста, предложите мне лучший способ сделать чистый URL-адрес, такой как http://www.example.com/category/sub-category, без перезаписи всех CSS, JS и изображений.

Спасибо

Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте использовать END вместо L. Это предотвращает дальнейшее переписывание, потому что Apache зацикливается до тех пор, пока не найдет никаких других подходящих правил или пока цикл не будет прерван при достижении предела. Если вы не можете использовать END, потому что ваш Apache очень старый, добавьте DPI в исходные правила, чтобы путь не переносился в последующие циклы.

RewriteRule ^([A-Z0-9-]+)/?$ index.php?category=$1 [NC,B,QSA,END]
RewriteRule ^([A-Z0-9-]+)/([A-Z0-9-]+)/? index.php?category=$1&subcategory=$2 [NC,B,QSA,END]

Спасибо, моя проблема была решена с помощью этого кода: <IfModule mod_rewrite.c> #Disable rewriting RewriteEngine Off </IfModule> Я поместил этот код в .htaccess и загрузил его в папку css и js. Сейчас работаю, но попробую и вашу идею, чтобы проверить, как лучше. Большое спасибо @Walf

Prashant Rajpoot 09.05.2018 07:24

@PrashantRajpoot В этом нет никакого смысла; ваше решение заставить rewriterules работать было полностью отключить перезапись?

Walf 09.05.2018 07:32

Да, это временное решение для отключения перезаписи в CSS и связанных папках. Я попробую ваш ответ после того, как снова начну этот проект. Если это сработает, я также дам вам знать. Спасибо за помощь @Walf.

Prashant Rajpoot 09.05.2018 08:18

Нет необходимости использовать END в правилах, поскольку шаблон и путь назначения правил различны. L в этой ситуации в порядке.

Amit Verma 10.05.2018 08:11

@starkeen Вы делаете предположения об окружающей среде. Плакаты не всегда предоставляют полное содержимое .htaccess, и если такое простое правило не работает, то обычно это происходит из-за вмешательства другого человека. Кроме того, END - лучший способ сопоставить виртуальный URL-адрес с файлом; L следует использовать только там, где может потребоваться дополнительная перезапись URL.

Walf 10.05.2018 13:15

Другие вопросы по теме