2014-01-08 2 views
1

Вчера я разместил вопрос о файле .htaccess. Сейчас работает, но у меня другая проблема. Например:Очистить URL с использованием .htaccess или не слэш

При попытке перейти на «локальный/о», он не работает, он дает мне «Ошибка 404»:

не найден

Запрошенный URL/Приложения/MAMP/htdocs/user/enric/не были найдены на этом сервере.

Но когда я перехожу к «localhost/about /», он работает. Зачем?

Я хочу, чтобы оба URL работали. Кто-нибудь может мне помочь?

Это код моего файла .htaccess:

<IfModule mod_rewrite.c> 

Options -Multiviews 
Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^channels/page/([0-9]+)/?$ channels/index.php?p=$1 [L] 
RewriteRule ^channels/([_0-9a-z-]+)/?$ channels/index.php?o=$1 [L] 
RewriteRule ^channels/([_0-9a-z-]+)/([0-9]+)/?$ channels/index.php?o=$1&p=$2 [L] 

# User profiles 
RewriteRule ^user/([^/]*)/$ /user/index.php?usr=$1 [L] 

# Check to see if the URL points to a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Trailing slash check 
RewriteCond %{REQUEST_URI} !(.*)/$ 

# Add slash if missing & redirect 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# Delete ".php" extension and adds "/" 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

</IfModule> 

Спасибо!

ответ

2

Попробуйте слегка измененный код в DocumentRoot/.htaccess:

Options +FollowSymLinks -Multiviews 

RewriteEngine On 
RewriteRule ^channels/page/([0-9]+)/?$ channels/index.php?p=$1 [L] 
RewriteRule ^channels/([_0-9a-z-]+)/?$ channels/index.php?o=$1 [L] 
RewriteRule ^channels/([_0-9a-z-]+)/([0-9]+)/?$ channels/index.php?o=$1&p=$2 [L] 

# User profiles 
RewriteRule ^user/([^/]*)/$ /user/index.php?usr=$1 [L] 

# Check to see if the URL points to a valid file 
RewriteCond %{REQUEST_FILENAME} !-f 
# Trailing slash check 
RewriteCond %{REQUEST_URI} !(.*)/$ 
# Add slash if missing & redirect 
RewriteRule ^(.*)$ $1/ [L,R=301] 

# Delete ".php" extension and adds "/" 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{THE_REQUEST} \s/[^?\s]+\.php 
RewriteRule (.*)\.php$ /$1/ [L,R=301] 

RewriteCond %{REQUEST_URI} ^(.+)/$ 
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f 
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301] 
+0

Спасибо! Оно работает! –

+0

Добро пожаловать, рад, что это сработало. – anubhava

+1

Я изменил часть кода, потому что он не работает с папками! ! 'RewriteCond% {REQUEST_FILENAME} -f RewriteCond% {REQUEST_URI} (/ $ |. \)! (. *) RewriteRule% {REQUEST_URI}/[R = 301, L]' –