Добавление мода переписать на существующий сайт PHP - PullRequest
0 голосов
/ 24 сентября 2010

Я обновляю приложение php, которое в настоящее время не использует перезапись URL. Цель состоит в том, чтобы скрыть расширения файлов. Общая структура сайта выглядит следующим образом

root/
  index.php
  login.php
  page1.php
  page2.php
  page3.php
  page4.php
  page5.php
  page6.php
  page7.php
  page8.php
subfolder/
  index.php
  validpage.php
images/
css/

Папка подпапок в приведенной выше структуре уникальна тем, что является единственной подпапкой, содержащей файлы php. Все остальные файлы находятся в корневой папке.

Я прошел через эти вопросы Mod Rewrite и PHP и Mod-Rewrite или маршрутизатор PHP? и mod_rewrite, php и файл .htaccess

Обновлено htaccess. благодаря @ thomasmalt

RewriteEngine on
RewriteBase /
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -l 
RewriteRule ^.*$ - [NC,L]


# only rewrite if the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-s 

# add .php to the url     
RewriteRule ^(.*)$ $1.php

Проблема теперь в том, что я получаю 500 вместо ошибки 404, когда пытаюсь получить доступ к несуществующей странице, такой как localhost /ex.php. Журнал ошибок Apache дает мне следующие ошибки. (Я получил доступ к localhost / index, который загрузил содержимое index.php, после чего я загрузил localhost /ex, который выдал мне ошибку 500.)

[Sat Sep 25 14:44:26 2010] [error] [client 127.0.0.1] File does not exist: C:/wamp/www/index
[Sat Sep 25 14:44:36 2010] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

Обновление : нашел ответ на мой вопрос здесь . Вопрос решен.

Ответы [ 4 ]

3 голосов
/ 24 сентября 2010

У Apache есть опция: Опции + MultiViews

Если вы включите это, вам не нужно помещать расширение файла в URL.

2 голосов
/ 24 сентября 2010

Я не совсем уверен, чего вы пытаетесь достичь, и я подозреваю, что неуважительное намерение подразумевает, что вы должны понимать и mod_rewrite, и то, как веб-сервер и php анализируют и выполняют файлы. Я не знаю, как ответить, не стреляя выше или ниже вашего уровня понимания, но я постараюсь.

Я могу рассказать вам, что вы в данный момент делаете .htaccess: (псевдокод)

if REQUEST_FILENAME does not exist then
    rewrite request to /index.php/<the request>

Поскольку index.php - это ваш php-скрипт, который выполняется, и все, что помещено в $ 1, игнорируется. Вот почему index.php выполняется независимо от того, что вы делаете.

То, что вы можете попытаться вставить в свой .htaccess, это:

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteRule ^(.*)$ $1.php

Это должно взять запрос и попытаться добавить .php до конца. К сожалению, я не проверял, но вы должны попробовать. Результат должен быть примерно таким:

if request is "/news/article" 
    translate it to "/news/article.php"

И вам следует читать документацию по mod_rewrite два раза в день в течение месяца и купить книгу О'Рейли о регулярных выражениях.

И если у вас есть доступ администратора к серверу разработки, вам следует заглянуть в

RewriteLogLevel
RewriteLog
1 голос
/ 24 сентября 2010

Исходя из опыта, сложнее, чем кажется, встраивать mod_rewrite в существующий сайт.

Это не потому, что mod_rewrite сложен - на самом деле его относительно легко настроить и получить новые URL-адреса.за работой.Причина в том, что это сложно, потому что на вашем существующем сайте все старые URL будут жестко запрограммированы, поэтому вам придется пройтись по своему коду, изменив их все, чтобы указать новый формат URL - это может быть особенно сложно, если ваш кодстроит URL-строки динамически.Вам нужно будет провести много тестов, чтобы убедиться, что вы выбрали все возможные варианты и все они по-прежнему работают.

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

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

1 голос
/ 24 сентября 2010
  1. Он отправляет вас в root, потому что у вас есть RewriteBase / что определяет базу по умолчанию ... Если вы хотите остаться в подпапке, просто создайте другой .htaccess в подпапке с RewriteBase /subfolder/ или удали его
  2. Вы можете сделать состояние, как вы хотите

    RewriteRule ^(([0-9]+)-)?page(-([0-9]+))?/?$    index.php?page=$2&id=$4 [L]
    

это приведет вас от www.abcd.com/2-page-3 к www.abcd.com/index.php?page=2&id=3

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