URL Каноникализация - Apache mod_rewrite - PullRequest
0 голосов
/ 16 февраля 2012

Возможно, я пытаюсь зайти слишком далеко, но здесь все равно.

В основном я ищу следующее:

  1. 301 перенаправляет каждый базовый URL-адрес на http://www.mydomain.com/ некоторые страницы являются https, он должен распознавать это и продолжать использовать https там, где ужеиспользуется / запрошено
  2. 301 перенаправить любые косые черты, т. е. http://www.mydomain.com/page/ становится http://www.mydomain.com/page (у меня уже есть строка кода, которая находит страницу index.php - этот сайт построен наCodeigniter)
    • I Я не хочу, чтобы базовый URL-адрес удалял косую черту, это единственный раз, когда косая черта должна быть оставлена ​​позади
  3. Найти все экземпляры индекса.php (в передней средней или в конце URL) и 301 перенаправляют их
  4. 301 перенаправляют любое использованиемоего ip-адреса к фактическому домену

Вот что у меня такдалеко в моем файле htaccess в моем корневом каталоге:

RewriteEngine on

Options +FollowSymLinks 
RewriteCond %{REQUEST_URI}   ^(.*)(/index\.php)$
RewriteRule ^(.*)index\.php/$  http://www.mydomain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST}   ^(mydomain\.com)(:80)? [NC]
RewriteRule ^(.*)$  http://www.mydomain.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST}   ^11\.11\.111\.111$
RewriteRule ^(.*)$  http://www.mydomain.com/$1 [R=301,L]

#This makes sure that the server actually finds the index file although its not in the url
RewriteCond $1   !^(index\.php|images|assets|downloads|css|js|robots\.txt)
RewriteRule ^(.*)$  /index\.php/$1 [L]

Я застрял прямо сейчас, любая помощь будеточень признателен !!

Редакции !!

Я добился определенного прогресса и вот что у меня получилось

<IfModule mod_rewrite.c>
RewriteEngine on

# index.php to /
RewriteCond %{THE_REQUEST} ^GET\ /.*/index\.(php|html)\ HTTP
RewriteRule (.*)index\.(php|html)$ /$1 [r=301,L]

# index.php to / at the base url
RewriteCond %{THE_REQUEST} ^GET\ /index\.(php|html)\ HTTP
RewriteRule (.*)index\.(php|html)$ /$1 [r=301,L]

# force www.
rewritecond %{HTTP_HOST} ^paolienvelope.com [nc]
rewriterule ^(.*)$ http://www.paolienvelope.com/$1 [r=301,L]

# force no IP
RewriteCond %{HTTP_HOST} ^70.40.204.154
RewriteRule ^(.*) http://www.paolienvelope.com/$1 [r=301,L]

#codeigniter direct
RewriteCond $1 !^(index\.php|images|assets|downloads|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

Это успешно вынуждает ip к URL-адресу. Удаляет индекс.php или index.html из URL, но правильно указывает на файл индекса, несмотря на то, что базовый URL имеет www.Тем не менее, нет кода для удаления косой черты только из запроса, любая помощь будет оценена !!Спасибо!

Ответы [ 2 ]

1 голос
/ 26 февраля 2012
RewriteEngine on

# index.php remove any index.php parts
RewriteCond %{THE_REQUEST} /index\.(php|html)
RewriteRule (.*)index\.(php|html)(.*)$ $1$3 [R=301,L]

# force www. (also does the IP thing)
RewriteCond %{HTTP_HOST} !^www\.paolienvelope\.com [NC]
RewriteRule ^(.*)$ http://www.paolienvelope.com/$1 [R=301,L]

# remove tailing slash
DirectorySlash off
RewriteCond $1 !^(index\.php|images|assets|downloads|css|js)
RewriteRule ^(.*)/$ $1 [R=301,L]

# codeigniter direct
RewriteCond $1 !^(index\.php|images|assets|downloads|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
0 голосов
/ 20 февраля 2012

Давайте попробуем решить этот момент за один раз.Как я уже сказал, я не профессионал в этом, но я могу предположить, что что-то поможет:

Я начну с 2. , потому что это кажется проще:

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?mydomain.\.com$ [NC]
RewriteRule ^(.+)/$ http://www.mydomain.com/$1 [R=301,L] 

Это работает, вместо того, что у вас есть?

источник: http://blog.valtersboze.com/2009/06/add-or-remove-trailing-slash-in-url-with-htaccess/

...