Нужна помощь с .htaccess, чтобы скрыть расширение PHP, но с некоторыми конкретными условиями - PullRequest
1 голос
/ 08 апреля 2011

Вот чего я хочу достичь:

www.mydomain.com/pages/23/page-title-hash-here -> www.mydomain.com/pages.php/23
www.mydomain.com/[otherpages] -> www.mydomain.com/[otherpages].php
www.mydomain.com/[otherpages]/ -> www.mydomain.com/[otherpages].php

По сути, есть несколько простых страниц, которые запрашиваются только именем файла (www.mydomain.com/contact or www.mydomain.com/faq), а затем есть страницы, на которые я ссылаюсь, используя pages.php/23/fdjsoipfahsd or products.php/54/gf-dsdfs-a-f, а затем я использую переменную $_SERVER['REQUEST_URI'], чтобы проанализировать все после .php и получить идентификатор продукта или идентификатор страницы и т. д. И есть много вариантов этих страниц ..

Если мне нужно жестко закодировать каждое имя файла .php, в котором есть трейлы, я тоже могу это сделать - мы больше не будем добавлять. Однако те, у которых нет никаких следов, должны все еще работать

Ответы [ 6 ]

2 голосов
/ 16 апреля 2011

Почему вы не используете просто:

RewriteEngine On
Options +MultiViews

Если я правильно понимаю, это должно сработать. Попробуй.

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

Попробуйте ниже

  1. RewriteRule ^ / pages / ([^ /] +) / ([^ /] +) /? $ /Pages.php/$1
  2. RewriteRule ^ / (. *) $ /$1.php
  3. RewriteRule ^ / (. *) / $ /$1.php
1 голос
/ 14 апреля 2011
RewriteEngine On
RewriteCond $1 !(.*\.php)$
RewriteRule ^/([^/]+)/?$ /$1.php
RewriteCond $1 !(.*\.php)$
RewriteRule ^/([^/]+)/(.+)$ /$1.php/$2 [R=301]

Эти правила переписывают, только если файл не заканчивается на .php. Затем во втором случае я установил перенаправление 301, как в php-файлах, которые вы используете .php для получения части запроса. Без параметра R скрипт не найдет .php, а строка вашего запроса будет пустой и покажет страницу по умолчанию, если я прав.

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

Попробуйте, это поможет вам в достижении ваших требований:

RewriteEngine on

RewriteCond %{REQUEST_URI} \/(pages|products)\/(.*)
RewriteRule (.*)$ %1.php/%2 [L]

RewriteCond %{REQUEST_URI} \/([a-z]+)([\/]?)
RewriteRule (.*)$ %1.php [L]
1 голос
/ 08 апреля 2011

Вы можете попробовать следующее.Он игнорирует запросы на файлы, которые существуют (например, '/images/image.jpg' не будет затронут), а на те, которые этого не делают, он попытается добавить ".php" к первому элементу "directory", какПока этот «каталог» содержит только буквенно-цифровые символы.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule  ^/([\w-]*)/?$    /$1.php  [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule  ^/([\w-]*)/(.*)$    /$1.php/$2  [L]
  • / test / fred / go -> /test.php/fred/go
  • / images / image.jpg -> /images/image.jpg (при условии, что этот файл существует)
  • / script.php / request / thing -> /script.php/request/thing (поскольку открывающая папка имеет точку вэто)
  • / test -> /test.php
...