htaccess - удалить имена каталогов из URL - PullRequest
0 голосов
/ 25 января 2019

У меня следующая структура сайта:

- index.php
- css/
- js/
- img/
- content/
  - product/
    - product-page-1.php
    - product-page-2.php 
  - static/
    - faqs.php
  - landing/
    - homeware-gifts.php 
    - stationary/
      - desks.php 

Так что на данный момент некоторые из моих URL похожи, но мне нужно скрыть каталоги content и product, static, landing

Продукты :

mysite.com/content/product/product-page-2.php

до

mysite.com/product-page-2

Статический :

mysite.com/content/static/faqs.php

до

mysite.com/faqs

Landing :

mysite.com/content/landing/homeware-gifts.php
mysite.com/content/landing/stationary/desks.php

до

mysite.com/homeware-gifts
mysite.com/stationary/desks

Примечание. Я также хочу скрыть расширение .php и сейчас использую это:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]
RewriteCond %{REQUEST_FILENAME}.php -f [NC]
RewriteRule ^ %{REQUEST_URI}.php [L]

Что работает, но нужно убедиться, что оно остается также

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете использовать эти правила в корне вашего сайта .htaccess:

RewriteEngine On

## hide .php extension
# To externally redirect /content/file.php to /file
RewriteCond %{THE_REQUEST} \s/+site1/content/(.+?)\.php[\s?] [NC]
RewriteRule ^ /site1/%1 [R=301,NE,L]

## To internally rewrite /file to /content/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/site1/content/$1.php -f
RewriteRule ^site1/(.+?)/?$ site1/content/$1.php [L,NC]

Это предполагает, что .htaccess нет внутри site1/ или где-либо еще.

0 голосов
/ 25 января 2019

Предполагая, что ваш веб-сервер - Apache2, вы должны указать в конфигурации vhost:

    <Directory "/path/to/webroot">
         Options Indexes FollowSymLinks MultiViews
         AllowOverride all
         Order allow,deny
         allow from all
    </Directory>

И тогда вы сможете играть с .htaccess, сначала вам нужно будет добавить

    Options +FollowSymlinks
    RewriteEngine On

во всех .htaccess и используйте этот шаблон:

    RewriteRule ^MySuperRewritePath$  /my/path/without/rewrite.php [L]

(Насколько я знаю, вам не нужно вставлять .php в переписанные URL, так что это хорошоза то, что вы хотите)

Проверьте официальные документы , если вы хотите больше информации

...