mod_write RewriteRule - PullRequest
       14

mod_write RewriteRule

0 голосов
/ 27 апреля 2011

Я уверен, что это просто, но я совершенно не могу заставить его работать: \ Я пытаюсь переписать

http://www.example.com/products/ABC123

до

http://www.example.com/index.php?page=shop&code=ABC123

Я пробовал

RewriteBase /

RewriteRule ^products/([A-Za-z0-9]+)$ index.php?page=shop&code=$1

, который перенаправляет нормально, но все изображения (и js css и т. Д.) Имеют неправильный путь (example.com/images/ABC123.jpg is example.com/products/images/ABC123.jpg).Также все ссылки теперь имеют неправильный путь (example.com/?page=shop&folder=7 is example.com/products/?page=shop&folder=7)

Мой файл .htaccess находится в корне,Я также пробовал продукты RewriteBase / и удалял продукты / из правил regex, но это просто выдает 404

Я прочитал официальные документы относительно mod_rewrite несколько раз за последний час, я должен что-то упустить?

** РЕДАКТИРОВАТЬ: ** Извините, все было немного хитрый вопрос, оказывается, вы можете решить это с помощью элемента HTML BASE, с моим регулярным выражением в начале не было ничего плохого!

я кладу

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Попробуйте это правило в своем файле .htaccess:

Options +FollowSymlinks -MultiViews
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^products/([-a-z0-9]+)$ /index.php?page=shop&code=$1 [L,NC,QSA]
0 голосов
/ 27 апреля 2011
      RewriteEngine On
      RewriteBase /

      # Generic requests for the application
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^products/(.*)$ index.php?page=shop&code=$1 [L]

Что это делает?

РЕДАКТИРОВАТЬ: Ах, хорошо, что ваши ссылки на странице неправильно, это то, что вы, вероятно, должны исправить в PHP.Вы можете попробовать это:

    RewriteEngine On
    RewriteBase /

    # Generic requests for the application
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Main page
    RewriteRule ^products/([A-Za-z0-9]+)$ index.php?page=shop&code=$1 [L]
    RewriteRule ^products/?(.*)$ index.php?$1 [L]

    # Resources
    RewriteRule ^products/images/(.*)$ images/$1 [L]
    RewriteRule ^products/css/(.*)$ css/$1 [L]
    RewriteRule ^products/js/(.*)$ js/$1 [L]

Но на самом деле вы должны сгенерировать ваши URL в php, чтобы они работали правильно: это было бы более эффективно, чем каждый раз запускать их через mod_rewrite.

...