#php #wordpress #mod-rewrite
#php #wordpress #мод-перезапись
Вопрос:
В настоящее время я создаю веб-сайт (http://tannernelson.me/ehs )
Он размещен на Godaddy, и я использую WordPress в качестве CMS.
Я хочу иметь возможность создавать:
http://tannernelson.me/ehs/school/academics/teachers/jsmith
превратиться в
http://tannernelson.me/ehs/index.php?pagename=teachersamp;detail=jsmith
Итак, в принципе, если в URL есть 4 сегмента (школа / академики / учителя / jsmith) Я хочу, чтобы последний параметр был переменной. Таким образом, четвертым сегментом любого URL-адреса будет переменная «detail»
Мой текущий URL переписан в настоящее время
# Mod Rewrite
Options FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /ehs/index.php [L]
Options -Multiviews
Это не будет работать никаким другим способом, даже с файлом WordPress .htaccess по умолчанию. И я понятия не имею, что это значит, или какой URI запроса сделан из этого. Это действительно сбивает с толку.
Есть идеи?
Ответ №1:
Код, который у вас есть прямо сейчас, означает:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Если запрошенное имя файла не ( !
) является обычным файлом -f
и если запрошенное имя файла не ( !
) является каталогом -d
, то:
RewriteRule . /ehs/index.php [L]
Сопоставьте любой отдельный символ ( .
), и если совпадение найдено, перепишите URL на /ehs/index.php
, а затем сделайте это последним правилом ( [L]
), поэтому не обрабатывайте никаких дальнейших правил.
Это не похоже на то, что вы хотите, но, похоже, работает. http://tannernelson.me/ehs/school/academics/teachers/jsmith
отображается (я думаю) http://tannernelson.me/ehs/index.php
, потому что я получаю пользовательскую страницу 404 not found.
Попробуйте следующий .htaccess
код:
Options FollowSymLinks
RewriteEngine On
RewriteBase /
# Redirect the ehs/school/academics/$1/$2 URIs to /ehs/index.php?pagename=$1amp;detail=$2
RewriteRule ^ehs/school/academics/([^/] )/([^/] )$ /ehs/index.php?pagename=$1amp;detail=$2 [L]
# Otherwise if the requested URI is not found (not a file nor a directory)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Redirect everything else to index.php
RewriteRule .* /ehs/index.php [L]
Options -Multiviews
Я только что протестировал это на своем сервере Apache, и это работает.