Перезапись плоских URL с использованием .htaccess

0

Я пытаюсь сократить свой следующий URL-адрес

Из

 www.domain.com/index_1.php?var=value
 www.domain.com/index_2.php?name=value

к

 www.domain.com/value
 www.domain.com/name/value

что я на самом деле, что есть,

 www.domian.com                    // This should reach index_1.php
 www.domain.com/value              // This should reach index_1.php
 www.domain.com/name               // This should reach index_2.php
 www.domain.com/name/value         // This should reach index_2.php
 www.domain.com/name/              // The last slash should be omitted and redirect to "www.domain.com/name"

Диапазон значений может содержать [0-9] [AZ] [az] [-] [_]

Я пробовал следующий код.htaccess,

 Options +FollowSymlinks
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule (^name?$)|(^name/([^/]+)/?$) /index_2.php?name=$1 [L]
 RewriteRule ^([^/][^(name)]+)/?$ /index_1.php?var=$1 [L]

когда я печатаю

 www.domian.com                    // It Works.
 www.domain.com/value              // It shows "404 Page Not Found".
 www.domain.com/name               // It works.
 www.domain.com/name/value         // It works.
 www.domain.com/name/              // It shows "404 Page Not Found".

если это можно сделать с помощью PHP, ответьте.

  • 0
    www.domain.com/value и www.domain.com/name имеют одно и то же регулярное выражение. вам нужно что-то, чтобы мы могли отличить их друг от друга
Теги:
.htaccess
mod-rewrite
url-rewriting

2 ответа

1
Лучший ответ

Вы должны различать www.domain.com/name и www.domain.com/value.

в противном случае вы можете сделать это, используя PHP.

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# For www.domain.com/value
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ index.php?var=$1 [L,QSA]

# For www.domain.com/name/value
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index_2.php?$1=$2 [L,QSA]

В index.php:

if(isset($_GET["var"])) {
  $value = $_GET["var"];
  if($value == "name"){
    include"index_2.php";  
  }else{
    include"index_1.php";
  }
}else{
  include"index_1.php";
}
  • 0
    Спасибо, это работает..
0

Вы можете использовать:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# For www.domain.com/value
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ index_1.php?var=$1 [L,QSA]

# For www.domain.com/name/value
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/([\w-]+)/?$ index_2.php?$1=$2 [L,QSA]
  • 0
    Могу ли я узнать, что не так с ответом?
  • 0
    www.domain.com/value должен указывать на index_1.php и www.domain.com/name должны указывать на index_2.php . Ваши правила нарушаются при этом!
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню