.HTACCESS Tricks - переписывание для динамического контента - PullRequest
0 голосов
/ 25 февраля 2011

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

a) http://www.mysite.com/article/this-article/

Он фактически отображает содержимое из:

b) http://www.mysite.com/article/index.php?src=this-article

, а также, если пользователь вводит (b), тогда у него 301-й (a)

В моем HT-доступе я в настоящее времяиметь следующее:

<IfModule mod_rewrite.c>
RewriteEngine on


# index.php to /
RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
RewriteRule (.*)index\.(php|html)$ /$1 [R=301,L]

# force www.
rewritecond %{HTTP_HOST} ^mysite.com [nc]
rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]

RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* http://www.mysite.com%{REQUEST_URI}? [R=301,L]

</IfModule>

1 Ответ

0 голосов
/ 25 февраля 2011

Я не уверен, что то, что вы описываете, возможно, используя только правила перезаписи. Но вы можете использовать комбинацию правил переписывания и PHP следующим образом:

Измените файл .htaccess так, чтобы он выглядел следующим образом (ПРИМЕЧАНИЕ. Предполагается, что файл .htaccess находится в корневом каталоге)

<IfModule mod_rewrite.c>

  RewriteEngine On

  # force www.
  RewriteCond %{HTTP_HOST} !^www\.mysite\.com$ [NC]
  RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,NC]

  RewriteCond %{REQUEST_URI} !^/article/index(-new)?\.php
  # this is looking for anything past article that is not a /. You may 
  # need to change that to be more inclusive - something like (.*)
  RewriteRule ^article/([^\/]+) /article/index-new.php?src=$1 [L,NC]

  # index.php to /
  RewriteRule ^index\.(php|html)$ / [R=301,L]
  #RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
  #RewriteRule (.*)index\.(php|html)$ /$1 [R=301,L]

  RewriteCond %{THE_REQUEST} ^GET\ /.*\;.*\ HTTP/
  RewriteCond %{QUERY_STRING} !^$
  RewriteRule .* http://www.mysite.com%{REQUEST_URI}? [R=301,L]

</IfModule>

Ваша статья / index.php станет перенаправителем на ваш новый index.php и будет выглядеть примерно так:

<?php
    if (isset($_GET["src"]))
        header("location: /article/" . basename($_GET["src"])); // Using basename() in case src happens to be referring to an actual file in your code
    else
        header("location: /");
?>

Ваш "реальный" индекс будет на самом деле index-new.php, который будет вызывать правило перезаписи.

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