2016-09-13 2 views
1

Я разработал свою собственную CMS на PHP, и теперь я бы хотел сделать ее SEO-Friendly, но у меня возникли некоторые проблемы.
Проблемы с URL с htaccess и CMS

Большинство страниц сайта доступны из ид, как:

www.example.com/?id=alphanumericId123 
www.example.com/?id=main 

и так далее, и я хотел бы переписать URL из этой страницы:

www.example.com/aplhanumericId/ 
www.example.com/main/ 

Я написал это переписывают правило, и она отлично работает:

RewriteEngine On 
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA] 

, но он не может работать на Тхо несколько страниц, которые доступны статическому файлу или только для скриптов.
Нет ли способа сделать некоторые исключения? Как:

if the requested file exsist { 
    if it is protected { 
     display error 403 
    } else { 
     display file 
} } else { 
    rewrite rule 
} 

ответ

1

Вы не должны переписывать пути к существующим файлам и каталогам:

RewriteEngine On 
# Exclude existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
# Exclude existing directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA] 

Также обратите внимание, что ваше правило не позволит вам буквенно-цифровые идентификаторы, как вы за исключением номера.

Альтернативы будет:

... 
# No forward slash 
RewriteRule ^([^\/]+)/?$ index.php?id=$1 [QSA] 

или

... 
# Only a selection of characters including - and _ 
RewriteRule ^([-\w]+)/?$ index.php?id=$1 [QSA] 
+1

@yessure И это работает, когда вы закомментировать эти 2 условия и правила? – jeroen

+1

Нет, я просто ошибся, извините. Спасибо, что первое условие, которое вы wroted отлично работает. –

0

Используйте следующее перед вашим RewriteRule

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

В основном он проверяет, если это не файл, а не каталог.

Смежные вопросы