удалите расширение php, остановите доступ к URL с расширением .php и удалите косые черты - PullRequest
1 голос
/ 19 октября 2011

Я хочу, чтобы мои URL-адреса были без расширения, поэтому нет расширения .php, я также хочу, чтобы не было возможности получить доступ к URL-адресу через косую черту.URL-адрес без расширения, если вы пытаетесь получить к нему доступ с помощью .php

Я начал писать правило, запрещающее доступ с помощью перенаправления / и, но оно не работает, любая помощь?

#this removes php extension
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

# stops you accessing url with.php
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^.?\ ]+)\.php
RewriteRule ^([^.]+)\.php(/.+)?$ /$1%{PATH_INFO} [R=301]

# stops you accessing url with / **DOESNT WORK**
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$  /$1 [R=301,L]

1 Ответ

2 голосов
/ 19 октября 2011

Вы смотрите на вещи задом наперед: первое правило, которое у вас есть, не «удаляет расширение php», оно добавляет его к URL-адресам, у которых его еще нет (технически, к любомуне содержит точку).

Я думаю, вы хотите что-то более похожее на это:

RewriteEngine On
RewriteBase /

# Remove .php from any URLs that contain it, using an external 301 redirect
RewriteCond %{QUERY_STRING} !^no-redirect-loop(&|$)
RewriteRule ^(.*)\.php$  $1  [NS,R=301,L]

# Now add it back internally
RewriteCond %{QUERY_STRING} !^no-redirect-loop(&|$)
RewriteRule ^(.*)$  $1.php?no-redirect-loop  [NS,QSA]

Редактировать: Во время отладки другой аналогичный ответ Я понял, что предыдущее решение, которое я разместил здесь, не будет работать в файле .htaccess.Я отредактировал приведенный выше пример кода, чтобы вместо него использовать довольно уродливый ключ для прерывания циклов перенаправления.Побочным эффектом kluge является то, что все сценарии увидят дополнительный пустой параметр URL с именем no-redirect-loop.

...