не может конвертировать динамический URL в статический URL через .htaccess - PullRequest
0 голосов
/ 19 марта 2012

Я переписываю свою проблему. Ниже я привожу все детали того, что я пытаюсь сделать, и каков результат, который я получаю. Я надеюсь быть очень ясным в этот раз. У меня есть страница примеров здесь www.broadcast2world.com/samples.php. Все ссылки и данные, которые мы видим на странице, поступают из базы данных. Теперь предположим, что мы нажимаем на ссылку «Подробнее» для определенного видео, скажем, социальный контроль. Конкретная ссылка для этого видео запускается как <a href="video.php?pid='.$id.'">. Он передает свой идентификатор над URL в формате http://www.broadcast2world.com/video.php?pid=66.

Я фиксирую этот идентификатор в переменной, используя

if(!isset($_GET['pid'])){
    $pageid='66';
}
else{
  $pageid=$_GET['pid'];  
} 

Используя переменную $ pageid, я запускаю запрос, который в конечном итоге подготавливает страницу для этого конкретного видео.

Мой SEO-специалист нуждается в URL-адресе в формате www.broadcast2world.com/video/name-of-the-video.

.

Теперь проблема в том, что, если я внесу изменения в mod_rewrite, которые чудесно объяснил Бен ниже, я не смогу выяснить, как связать это имя видео с его идентификатором. Я уверен, что я должен что-то изменить при создании определенного URL для видео, как описано выше. Но я правда не знаю что? Еще раз спасибо за вашу замечательную поддержку

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

В коде .htaccess, сгенерированном этим веб-сайтом, есть ряд ошибок.

  • Символ точки (.) должен быть экранирован в левой части директив RewriteRule, т.е.\.php.
  • Строка запроса не принимается во внимание (это основная причина вашей проблемы, которую я объясню ниже).
  • Нет указания на тип используемого перенаправления.Временное?Постоянный?
  • Директивы RewriteBase нет.Не существенно, так как / принимается по умолчанию, но для удобства чтения я склонен его использовать.

Директивы Rewrite особенно учитывают только компонент REQUEST_URI.Ниже приводится справочная страница mod_rewrite .

REQUEST_URI Компонент пути запрошенного URI, например "/index.html".Это, в частности, исключает строку запроса, которая доступна как его собственная переменная с именем QUERY_STRING.

В комментариях поясняется следующий код, а информацию об отладке можно найти ниже.

# Enable rewrite engine http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine
RewriteEngine On

# Sets the base URL for per-directory rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
RewriteBase /

# Match the regular expression ^pname=...$ with the QUERY_STRING variable as the subject
# Query string starts with pname (`^`). 
# Matches exactly pname=overviewvideos.
# Must end with overviewvideos (`$`)
RewriteCond %{QUERY_STRING} ^pname=overvidevideos$

# If the above condition is met, redirect to the 2nd parameter.
# Note the escaped period (\.)
# Note the status code 302 (Found, temporary) Can be 301 for permanent etc.
# Note the L flag - this prevents further rules being processed if the conditions are met. (L for Last)
# Note that at this stage we are back to matching the REQUEST_URI, so just allvideos.php in our regular expression. Must start and end with the string allvideos.php
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]

Входной URL: http://www.yoursite.com/allvideos.php?pname=overvidevideos

RewriteCond %{QUERY_STRING} ^pname=overvidevideos$  This condition was met
RewriteRule ^allvideos\.php$ allvideos.php?pname=Overview%20Videos [R=302,L]    
    This rule was met, the new url is http://www.yoursite.com/allvideos.php?pname=Overview%20Videos
    Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 302

Выходной URL: http://www.yoursite.com/allvideos.php?pname=Overview%20Videos

Чтобы повторить правила, вы можете продублировать строки, начиная с RewriteCond и RewriteRule.

1 голос
/ 19 марта 2012

Заменить следующую строку

RewriteRule ^allvideos.php/pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

С кодом ниже

RewriteRule ^allvideos.php?pname=overviewvideos$ allvideos.php?pname=Overview%20Videos 

Обратите внимание на замену / на ?

Аналогичным образом внесите те же изменения во второе правило перезаписи

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