Есть ли способ, используя mod_rewrite, удалить как .html, так и .php код с моего сайта? - PullRequest
2 голосов
/ 15 декабря 2011

Мне интересно, есть ли способ, с помощью mod_rewrite, удалить как .html, так и .php код с моего сайта?

Большинство моих страниц сделаны с использованием HTML, но страница контактов имеет расширение .php. Использование кода в .htaccess

Options +FollowSymLinks
Options +Indexes
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.html [NC,L]

явно заботится о .html-части. Можно ли изменить это, чтобы включить мою страницу в один PHP?

Или, если ничего другого, есть ли способ написать код mod_rewrite для каждой страницы отдельно, чтобы избавиться от их расширений?

Спасибо заранее.

Ответы [ 4 ]

0 голосов
/ 08 февраля 2012

Это избавит от расширений, но перенаправит на одну страницу: index.php, в которой вы можете проверить, существует ли страница и включить ее.

0 голосов
/ 15 декабря 2011

Если вы просто статичный сайт, то, вероятно, вы можете использовать этот:

RewriteRule ^(my-contact-page-name)$ $1.php [L,NC]
RewriteRule ^([^\.]+)$ $1.html [L,NC]

просто убедитесь, что вы вводите my-contact-page-name без .php:)

0 голосов
/ 15 декабря 2011

Вот совершенно другой ответ:

# Stop if static files:
RewriteRule (.*)(\.(css|js|htc|pdf|jpg|jpeg|gif|png|ico))$ - [NC,QSA,L]

# if it ends by htm or Php, 404:
RewriteRule (.*)(php|htm|html)$ - [L,R=404]

# if, when adding ".htm" it's a file...
RewriteCond %{SCRIPT_FILENAME}.htm  -f
# Rewrite it (and end processing):
RewriteRule (.*) $1.htm - [L,R=404]

# Same principles with "html" then php:
RewriteCond %{SCRIPT_FILENAME}.html  -f
RewriteRule (.*) $1.html - [L,R=404]
RewriteCond %{SCRIPT_FILENAME}.php  -f
RewriteRule (.*) $1.php - [L,R=404]

# everything else = 404:
RewriteRule . - [L,R=404]

Два совета:


Пожалуйста, попробуйте использовать директиву RewriteLog: она помогает вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

Могу ли я попросить вас добавить переписанный журнал в ваш вопрос?

0 голосов
/ 15 декабря 2011

Вы можете удвоить RewriteRules и проверить для каждого возможного расширения (если файл с таким именем существует, правило вступит в действие).

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME}.html  -f
RewriteRule $  .html [NC,L]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME}.php  -f
RewriteRule $  .php [NC,L]

Регулярное выражение $, равное «нулевой ширине», соответствует концу текущего пути, поэтому расширение просто добавляется.

Наименьшее усилие решение будет просто использовать:

Options +MultiViews

(На самом деле обеспечивает немного больше интеллектуальных возможностей сервера, но требует небольшой производительности).

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