2014-02-11 3 views
0

У меня есть htaccess файл, выполняющий переписывание URL. Он в основном удаляет расширение .php.htaccess переписать, как отменить файлы подкаталогов

Правила работают нормально, например. они успешно переписывают http://example.com/contact.php в http://example.com/contact

Однако переписывание также изменяет файлы подкаталогов, такие как /includes/check-form-input.php.

Итак, когда, например, форма на contact.php пытается отправить на /includes/check-form-input.php htaccess переписывает .php с конца, и я получаю 404 заголовка.
i.e. /includes/check-form-input не найден.

По крайней мере, кажется, что происходит, используя HTTP_REFERER, кажется, подтверждает это как реферер был /includes/check-form-input без внутр .php

Есть ли способ, чтобы добавить правило свести на нет все вложенные каталоги?

У меня есть следующий htaccess, который копируется из другого ответа здесь, на SO, так как я не 100% не понимаю структуру перезаписи.
(я оставил в WWW к не-WWW перенаправить в случае, если это причина)

## Rewrite on 
RewriteEngine on 


## Redirect all pages from non-www to www 
Options +FollowSymLinks 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 


## URL rewrite 
# Unless directory, remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://example.com/$1 [R=301,L] 

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://example.com/$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteRule ^([^/.]+)$ $1.php [L] 

ответ

1

Вы можете исключить все подкаталоги,

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^([^/]+)\.php$ http://example.com/$1 [R=301,L] 

или ограничить его только GET запросов:

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ (.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://example.com/$1 [R=301,L] 

или просто исключить подкаталог includes

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteCond %{REQUEST_URI} !^/includes/ 
RewriteRule ^([^/]+)\.php$ http://example.com/$1 [R=301,L] 
Смежные вопросы