htaccess переписать на страницу, которая может или не может иметь идентификаторы - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь создать правило htaccess для перезаписи следующих URL:

localhost/abc/def/1 (or with trailing slash would be fine)

до

localhost/abc/def.php?id=1

Доступ только к localhost/abc/def/ также действителен, и он работает.

Мой код на данный момент:

RewriteEngine On

Options +FollowSymLinks
Options All -Indexes
RewriteEngine On


RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.jpeg|robots\.txt)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule  ^index$                ./src/index.php    [NC,L] # it works
RewriteRule  ^def/?$                ./src/def.php [NC,L]  #works too!
RewriteRule  ^def/(.*)?$            ./src/def.php?id=$1 [NC,L] #this doesnt

Я прочитал несколько постов, подобных этому Переписать правило для определения только чисел , но они не работают для меня.

Странно то, что если я изменяю косую черту между def и id с подчеркиванием, это работает примерно так:

RewriteRule  ^def_(.*)?$            ./src/def.php?id=$1 [NC,L]

Но URL становится localhost/abc/def_1 и невыглядит так хорошо.

ОБНОВЛЕНИЕ: Структура сайта:

/home/username/public_html/abc/  (have multiple websites on public_html)
|_media/
|____js/
|____css/
|____images/
|_src/
|____def.php
|____fgh.php
|_.htaccess

Когда правило перенаправления def / 1 работает, URL-адреса мультимедиа на странице также используютсяпереведено на: http://localhost/abc/def/css/bootstrap.min.css

Спасибо!

1 Ответ

0 голосов
/ 24 марта 2019

Воспроизводя ваш сценарий, я создал следующую структуру папок:

/home/username/public_html/
|_ abc/
|___ .htaccess
|___ src/
|_____ def.php

В моем .htaccess, расположенном внутри папки abc, у меня есть следующее:

RewriteEngine On

RewriteRule ^def/?$ src/def.php [NC,L]
RewriteRule ^def/([1-9]+)/?$ src/def.php?id=$1 [NC,L]

И все упомянутые вами сценарии работают как положено.

Эти 2 переходят на def.php:

domain.com/abc/def
domain.com/abc/def/

Эти 2 переходят к def.php?id=1 и def.php?id=3 соответственно:

domain.com/abc/def/1
domain.com/abc/def/3/

Боюсь, у вас могут быть дополнительные .htaccess или вступающие в силу правила, или даже ваш браузер кэшируется, не давая нужную информацию, которую вы хотите.

Попробуйте использовать другой браузер и попробуйте описанное выше в точности так, как я это описал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...