2016-10-01 3 views
1

Какой способ лучше переписать URL-адресаЛучший способ для перезаписи URL-адресов

(a). Использование файла Htaccess и использовать регулярные выражения в нем, для правила перезаписи

Options +FollowSymLinks 
RewriteEngine On 

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

RewriteRule ^users/(\d+)*$ ./profile.php?id=$1 
RewriteRule ^threads/(\d+)*$ ./thread.php?id=$1 

RewriteRule ^search/(.*)$ ./search.php?query=$1 

ИЛИ

(б). использовать htacess-файл для просто перенаправления каждого URL-адреса на index.php, а затем использовать PHP для дальнейшего перенаправления.

Options +FollowSymLinks 
RewriteEngine On 

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

RewriteRule ^.*$ ./index.php 

и после того, что каждый URL может обращаться с помощью index.php с помощью $_SERVER['REQUEST_URI'] и мы можем использовать require() заявление для загрузки конкретного файла

Какой метод лучше на основе безопасности и скорости?

ответ

0

Этот метод является более совершенным, используйте следующие коды для вашего файла .htaccess, а также определить свои каталоги, которые вы хотите получить доступ в сценариях, таких как: JS, CSS или загрузить папки

RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets|**data**|**live**|**css**|**js**|**images**). 

если вы хочу поместить скрипт в папке, которую вы должны определить имя папки, прежде чем /index.php на втором последнее утверждение типа нас

RewriteRule ^(.*)$ **anyFolderName**/index.php/$1 [PT,L] 

Убедитесь, что вы не ставили какое-либо дополнительных пространство, письма или ввести иначе переписать модель не будет выполняться.

Примечание. Кроме того, убедитесь, что вы запустите/проверьте файл rewrite_module с вашего сервера/apache/apache modules/rewrite_module.

<IfModule mod_rewrite.c> 
# Turn on URL rewriting 
RewriteEngine On 

# If your website begins from a folder e.g localhost/my_project then 
# you have to change it to: RewriteBase /my_project/ 
# If your site begins from the root e.g. example.local/ then 
# let it as it is 
RewriteBase/

# Protect application and system files from being viewed when the index.php is missing 
RewriteCond $1 ^(application|system|private|logs) 

# Rewrite to index.php/access_denied/URL 
RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L] 

# Allow these directories and files to be displayed directly: 
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets) 

# No rewriting 
RewriteRule ^(.*)$ - [PT,L] 

# Rewrite to index.php/URL 
RewriteRule ^(.*)$ /index.php/$1 [PT,L] 
</IfModule> 
0

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

Options +FollowSymLinks 
RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f 
RewriteRule ^([\w-]+)/(\d+)/?$ $1.php?id=$2 [L,QSA] 
Смежные вопросы