Как я могу перенаправить/переписать все URL-адреса, содержащие определенную строку?

это поставило меня в тупик на несколько дней. Любая помощь будет принята с благодарностью.

Я думаю, что htaccess, вероятно, лучший способ сделать то, что мне нужно, но если у вас есть другая версия, я рад ее услышать.

Я использую joomla в качестве своей CMS, и прямо сейчас у меня есть файл .htacces, который будет принимать все URL-адреса и отправлять их в компонент сообщества моего сайта.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?option=com_comprofiler&task=userProfile&user='$1' [L]


# RewriteRule ^(.*) index.php?cb_username=$1
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php

Однако это будет перенаправлять URL-адрес каждой страницы, с которой не связан каталог или файл.

Мне нужно, чтобы файл htaccess перенаправлял URL-адреса только в том случае, если они содержат строку «сообщество/профиль/пользователь».

Я все еще считаю себя нубом, и я уже потратил много дней, пытаясь решить эту проблему.

Надеюсь, кто-то еще может пролить свет на этот вопрос здесь. Ниже приведен полный код моего файла .htaccess.

 ##
# @version $Id: htaccess.txt 1005 2006-10-05 18:00:00Z stingrey $
# @package Joomla
# @copyright Copyright (C) 2006 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##
Options +FollowSymLinks
#
# mod_rewrite in use
#
RewriteEngine On
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update YourJoomlaDirectory (just / for root)

RewriteBase /

#
# Rules
#
#
# ProfileRedirector V 1.3
#
# Make sure your host allows option override
# and has ModRewrite installed

# activate Rewrite enginge

RewriteEngine On


RewriteBase /

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?option=com_comprofiler&task=userProfile&user='$1' [L]


# RewriteRule ^(.*) index.php?cb_username=$1
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php

person user695695    schedule 04.03.2012    source источник


Ответы (1)


Прежде всего, вы должны удалить двойные RewriteBase и RewriteEngine.

Теперь, вы имели в виду что-то вроде этого:

Options +FollowSymLinks
RewriteBase /

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} \.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ $1 [L]

RewriteRule ^(.*)community/profile/user/(.*)$ index.php?option=com_comprofiler&task=userProfile&user=$2 [L]

Первая перезапись не должна ничего менять в пути ко всем файлам изображений. Если URL-адрес содержит community/profile/user/, он переписывает URL-адрес на index.php?option=com_comprofiler&task=userProfile&user={what-comes-after-user/}.

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

Я надеюсь, это поможет вам.

person Gijs Paulides    schedule 04.03.2012
comment
Большое спасибо за попытку помочь. Я попробовал это, но это дает мне ошибку 404 для любой страницы, отличной от домашней страницы по умолчанию. Теперь я понимаю, что задал неправильный вопрос. - person user695695; 05.03.2012
comment
МОИ профили расположены в разделе community/profile/user/username. Мне нужно, чтобы файл htaccess ничего не делал, если не будет найден URL-адрес, содержащий community/profile/user. если эта строка найдена, то она должна изменить ссылку на mysite.com/username, но на самом деле показывать страницу index.php?option=com_comprofiler&task=userProfile&user=$2 Спасибо за попытку помочь! - person user695695; 05.03.2012
comment
Ах я вижу. Вы пытаетесь перенаправить И переписать. Невозможно использовать нужный вам метод, потому что mysite.com/username заблокирует любые другие подстраницы, например, mysite.com/contact перенаправит на контакт пользователя. Более простой способ — переписать правило в /usr/$2 [R], а затем переписать правило /usr/(.*) в index.php?... - person Gijs Paulides; 05.03.2012