2016-05-06 10 views
0

Я новичок в htacces.Как внешне перенаправить URL-адрес, используя htaccess, когда url содержит пробел, номер или тире

Я хочу создать htaccess как stackoverflow.

Проверьте любой URL-адрес stackoverflow как «hide file extension in url by htaccess». Если вы поместите файл .html/.php/.asp/.abc/.xyz, он перенаправит его на «hide file extension in url by htaccess», даже если вы положите/наконец-то не получится

Значения, которые я хочу сказать, имя файла url содержит любую клавиатуру характер, и он будет перенаправляться извне.

ниже мой текущий Htaccess

RewriteEngine on 

# To internally 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 


# To externally redirect /dir/file.html to /dir/file 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.+?)\.html[\s?] [NC] 
RewriteRule^%1 [R=301,L,NE] 
+0

@anubhava, поэтому я хочу перенаправить ---/dir/file 1.html to/dir/file 1 ---/dir/fi le-1.html to/dir/file-1 --- /dir/file-1-2.html to/dir/file-1-2 –

+0

@anubhava НЕ работает для перенаправления извне. –

+0

@anubhava если я пишу HTTP: //localhost/folder1/folder2/About-us.html и нажмите клавишу ввода, он будет перенаправлять HTTP: // локальный/О-нами –

ответ

1

Вы должны использовать соответствующий `` RewriteBase`:

RewriteEngine on 
RewriteBase /folder1/folder2/ 

# To externally redirect /dir/file.html to /dir/file 
RewriteCond %{THE_REQUEST} ^GET\s(.+?)\.html[\s?] [NC] 
RewriteRule^%1 [R=301,L,NE] 

# To internally 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.+?)/?$ $1.html [L] 
+0

Проблема остается такой же после изменений в файле htaccess. –

+0

сейчас «http: // localhost/folder1/folder2/contact us.html» будет перенаправляться на «http: // localhost/folder1/folder2/folder1/folder2/связаться с нами» ИЛИ «http: // localhost /folder1/folder2/About-us.html "перенаправить на " http: // localhost/folder1/folder2/folder1/folder2/About-us " –

+0

Неправильно. Выше правила отлично работают на моем Apache. Вероятно, у вас плохой кэш в браузере или какое-то другое противоречивое правило. – anubhava

0

Мой последний файл .htaccess с помощью большого @anubhava

RewriteEngine on 
RewriteBase /folder1/folder2/ 

# To externally redirect /folder1/folder2/file.html to /folder1/folder2/file.html or any extension like .php/.asp/.abcd etc 
RewriteCond %{THE_REQUEST} ^GET\s(.+?)\.[a-z0-9]{2,}[\s?] [NC] 
RewriteRule^%1 [R=301,L,NE] 

# To internally 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.+?)/?$ $1.html [L]