2015-09-02 1 views
1

Я использую конфигурацию ниже в файле .htaccess, чтобы заставить трейлинг-косу в конце URL-адреса. Но этот параметр не подходит, когда URL-адрес неверен (параметр города отсутствует в базе данных), потому что он перенаправляет /wrongcity на /wrongcity/ вместо этого, чтобы отправить сообщение об ошибке 404. Как я могу решить эту проблему?Добавить трейлинг-косую черту только в том случае, если параметр правильный

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.*)([^/])$ /$1$2/ [L,R=301] 

RewriteRule ^([A-Za-z0-9-]+)//?$ index.php?city=$1 [L] 
+0

Я думаю, что, особенно для SEO, неправильный URL должен отправить статус 404, а не 301. –

ответ

1

Не имеет значения, что это перенаправление. Когда index.php скрипт видит «wrongcity», он должен вернуть 404.

Файл Htaccess не имеет ни малейшего представления, что это действительный город или неправильный город, он вслепую маршруты, чтобы все index.php, так что до вашего PHP скрипта return the 404.

Вы также можете удалить перенаправление из своего .htaccess файла и перенаправить для него ваш PHP-скрипт. Если он видит недостающую конечную косую черту, он проверяет, является ли город действительным или нет, если нет, верните 404, если он действителен, перенаправит, чтобы включить конечную косую черту.

if ($city_exist) 
{ 
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 

    if (substr($url, -1) != "/") 
    header("Location: ".$this_url."/"); //redirect to force trailing slash 
} 
else 
{ 
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
    exit();  
} 

 Смежные вопросы

  • Нет связанных вопросов^_^