Как это работает: Механизм перезаписи Htaccess?

#.htaccess #mod-rewrite

#.htaccess #мод-перезапись

Вопрос:

У меня есть следующий файл .htaccess:

 Options  FollowSymlinks

RewriteEngine on

RewriteRule ^mangas/([^/] )/([^/] )/$ - [F,L]
RewriteRule ^mangas/([^/] )/$ - [F,L]
RewriteRule ^mangas(/?)$ - [F,L]

RewriteRule ^([^/.] )/([^/.] )/([0-9] )(/?)$ index.php?manga=$1amp;chapter=$2amp;page=$3 [L]
RewriteRule ^([^/.] )/([^/.] )(/?)$ index.php?manga=$1amp;chapter=$2 [L]
RewriteRule ^([^/.] )(/?)$ index.php?manga=$1 [L]
  

Но что происходит, когда вы переходите по ссылке следующим образом: /manga/name_of_manga Это выдает мне ошибку 404 not found. Файл htaccess не перезаписывает index.php?manga=$1 в это: /manga/name_of_manga ?

По сути, все, что находится в форме index.php?manga=$1 , преобразуется только в /manga/name_of_manga , и оно все равно должно отображать материал. Если я перейду напрямую, используя index.php метод, он работает нормально.

Например, эти работы:
http://neoblizz.net/manga/?manga=Tower of God

http://neoblizz.net/manga/index.php?manga=Tower of God

Они не:
http://neoblizz.net/manga/Tower_of_God/

http://neoblizz.net/manga/Tower of God/

 154.20.109.65 - - [03/Jul/2014:18:28:50 -0400] "GET /manga/ HTTP/1.1" 500 - neoblizz.net "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-"
154.20.109.65 - - [03/Jul/2014:18:28:51 -0400] "GET /manga/ HTTP/1.1" 500 - neoblizz.net "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-"
154.20.109.65 - - [03/Jul/2014:18:28:52 -0400] "GET /manga/ HTTP/1.1" 500 - neoblizz.net "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-"
154.20.109.65 - - [03/Jul/2014:18:28:52 -0400] "GET /manga/ HTTP/1.1" 500 - neoblizz.net "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-"
  

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

1. Каково местоположение этого .htaccess? Это в /comic/ каталоге?

2. ДА. Он находится внутри /comic/ .

3. @anubhava добавил пример со ссылками.

Ответ №1:

Пусть будет так:

 Options  FollowSymlinks
RewriteEngine on
RewriteBase /manga/

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

RewriteRule ^mangas/([^/] )/([^/] )/?$ - [F,L]
RewriteRule ^mangas/([^/] )/?$ - [F,L]
RewriteRule ^mangas/?$ - [F,L]

RewriteRule ^([^/] )/([^/] )/([0-9] )/?$ index.php?comic=$1amp;chapter=$2amp;page=$3 [L,QSA]
RewriteRule ^([^/] )/([^/] )/?$ index.php?comic=$1amp;chapter=$2 [L,QSA]
RewriteRule ^([^/] )/?$ index.php?comic=$1 [L,QSA]
  

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

1. Внутренняя ошибка сервера теперь другие ссылки тоже не работают (те, которые работали раньше).

2. можете ли вы объяснить, в чем может быть причина?

3. О, там была опечатка, теперь исправлена. Можете ли вы попробовать еще раз?

4. Я тоже пробовал с этим, опечатки тоже /manga/ не /mangas/ было, все комиксы в правиле перезаписи — это манга. Но не сработало. Это действительно расстраивает, так как другой мой сайт использует те же настройки и работает просто отлично.

5. Как только вы выясните свои настоящие имена, это довольно простой материал в rewrite, и он работал в моих тестах. Лучше бы вы указали подробности, например, каково местоположение этого .htaccess? Какой URL-адрес не сработал? Какую ошибку вы видите и т.д.?