Принудительно переадресовывать URL-адреса xxx.php на xxx, используя .htaccess - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть сайт, на котором я годами работал, с .php как частью URL.Я хочу переключить это.Но существуют существующие ссылки, содержащие в себе .php. ВАЖНО: Я думаю, что многие люди быстро предполагают, что я задаю тривиальный вопрос "как мне удалить .php из моего URL?"что я уже знаю, как это сделать, и это уже работает.Мой вопрос не совсем такой, поэтому, пожалуйста, внимательно прочитайте.Это больше относится к существующим ссылкам и целям объединения URL .. для SEO.

В настоящее время у меня есть это в моем .htaccess, поэтому URL-адреса уже работают без .php:

RewriteEngine On
Options +MultiViews

Однако, есть ли способ обнаружить, когда есть .php, включенный в запрос, и переписать URL (или, другими словами, прямую пересылку 301) в URL, который пропускает .php?

http://www.mydomain.com/our-services.php -> http://www.mydomain.com/our-services

После предложения из 1-го ответа я привел его к этому:

Options +MultiViews
RewriteEngine On 
RewriteBase / 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L]

RewriteRule ^(.+)\.php $1 [L,R=301]
RewriteRule ^(.+)$ $1.php [L]

RewriteCond %{HTTP_HOST} ^rhondasherwood\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

ErrorDocument 404 /notfound

Создал бесконечный редирект.

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Добавьте следующее к вашему .htaccess в DocumentRoot.

MultiViews имеет свои недостатки.

Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

RewriteCond %{HTTP_HOST} ^rhondasherwood\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^(.+)\.php$ $1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ $1.php [L] 

ErrorDocument 404 /notfound

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]

предотвратить перенаправление петель.


RewriteCond %{HTTP_HOST} ^rhondasherwood\. 
RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L] 

является причиной возникновения петли. Приведите эти правила в следующем порядке:

Options +MultiViews 
RewriteEngine On 
RewriteBase / 

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 
1 голос
/ 14 февраля 2012

Это прямо из моего сознания, но я помню, как создавал бесконечный цикл перенаправления с этими правилами. Я добавлю обходной путь, если это не сработает:

# Use temporary redirects for testing
# Use permanent redirects when you're satisfied
# (1) Redirect all .php requests
RewriteRule (.+)\.php $1 [L,R]

# (2) Rewrite all non-php requests
RewriteRule (.+)(?<!\.php) $1.php [L]
0 голосов
/ 14 февраля 2012

См .: http://sicanstudios.com/how-to-remove-php-html-htm-extensions-with-htaccess/

Вам просто нужно использовать регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...