почему .htaccess вызывает одну и ту же страницу для каждого запроса и как я могу ее изменить?

#php #apache #.htaccess #mod-rewrite

#php #apache #.htaccess #mod-переписать

Вопрос:

Я использую следующие правила .htaccess на своем веб-сайте.

Используя это, я скрываю расширение php и создаю URL на основе seo.

теперь, когда я получаю доступ к странице, подобной

 http://localhost/freelancer/happiechef/login or   
http://localhost/freelancer/happiechef/sign 
  

Он вызывает city.php страница, но я использовал city.php страница, когда я запрашиваю этот URL

 http://localhost/freelancer/happiechef/california
  

Что-то не так в моих правилах .htaccess.

3 типа URL, которые я хочу :

1) http://localhost/freelancer/happiechef/california = будет вызываться city.php?city=$value

2) http://localhost/freelancer/happiechef/california/2/an-exploration-of-ramen = будет вызвано menu-details.php?city=$valueamp;mid=$valueamp;title=$value

3) http://localhost/freelancer/happiechef/california/2/an-exploration-of-ramen = будет вызван booking.php страница. Итак, url будет:http://localhost/freelancer/happiechef/california/2/an-exploration-of-ramen/booking

файл .htaccess :

 ErrorDocument 404 /freelancer/happiechef/not-found.php
ErrorDocument 500 /freelancer/happiechef/not-found.php
RewriteEngine On        

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9_-] )/?$ city.php?city=$1    [NC,L] 
#RewriteRule ^([A-Za-z0-9_-] )/([d] )/([A-Za-z0-9_-] )$ menu-details?mid=$2 [NC,L] 
RewriteRule ^([a-zA-Z0-9_-] )/([a-zA-Z0-9_-] )/([a-zA-Z0-9_-] )$ menu-details.php?city=$1amp;mid=$2amp;title=$3
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
  

Комментарии:

1. Это приятно. Удачи с этим .htaccess. Очевидно, что мы ничего не можем сделать, чтобы помочь исправить это, поскольку вы не показали НАМ, что в этом файле. И это также не сервис для написания кода. Мы не собираемся запускать .htaccess для вас.

2. ООО. Это моя ошибка. Я обновил свой вопрос @MarcB

3. Где этот .htaccess находится в вашей файловой системе?

4. В корневой папке..

5. Где city.php существует и является /freelancer/happiechef/ реальным каталогом?

Ответ №1:

Предполагая, что /freelancer/happiechef/ это каталог. Следующий код должен работать в /freelancer/happiechef/.htaccess :

 RewriteEngine On
RewriteBase /freelancer/happiechef/

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([w-] )/([w-] )/([w-] )/?$ menu-details.php?city=$1amp;mid=$2amp;title=$3 [L,QSA]

RewriteRule ^([w-] )/([w-] )/([w-] )/([w-] )/?$ booking.php?city=$1amp;mid=$2amp;title=$3amp;action=$4 [L,QSA]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(. ?)/?$ $1.php [L]

RewriteRule ^([w-] )/?$ city.php?city=$1 [QSA,L] 
  

Комментарии:

1. Ну, этот URL не работает http://localhost/freelancer/happiechef/california/2/an-exploration-of-ramen/booking он будет вызван booking.php страница, и мне нужно получить середину

2. Да, вы должны сохранить обе ErrorDocument строки. Также сообщите, что такое внутренний (фактический) booking.php URI. Например у нас есть menu-details.php?city=$1amp;mid=$2amp;title=$3

3. Я добавил новое правило для booking.php . Обратите внимание на параметры запроса, которые вы можете изменить в соответствии с вашим кодом.